怎样用2个栈实现队列(java)
发布网友
发布时间:2022-04-20 04:51
我来回答
共3个回答
热心网友
时间:2023-07-16 02:48
入栈:入队列1
出栈:把队列1的前n-1个元素倒到队列2,把2中第n个元素出队。下次出栈,因为此时数据在2中,则对2进行类似的操作。
具体如下:
元素为:A,B,C,3个,入栈后队列1中元素为A,B,C,队列2中为空,第一次pop,将队列1中前n-1个元素(n=3)出队,入队列2,剩下的第n个元素C出队显示,这时队列1中为空,队列2中A,B;第二次pop,将队列2中前n-1个元素(n=2)出队,入队列1,剩下的第n个元素B出队显示,这时队列1中为A,队列2中空,第三次pop,剩下的一个元素A出队显示,队列1、2都空,结束。
热心网友
时间:2023-07-16 02:48
你是排队的还是还是模拟堆栈啊?
排队:用集合,先进先出
package Test;
import java.util.ArrayList;
import java.util.List;
public class Queue {
// 实例化一个集合对象
private List list = new ArrayList();
private int size;// 存放元素个数
private int number = 0;// 用于存放下标
/**
* 定义获取元素个数的方法
*
* @return 返回集合大小
*/
public int getSize() {
size = list.size();
return size;
}
/**
* 定义一个进入队伍的方法
*
* @param obj
*/
public void add(Object obj) {
list.add(obj);
}
/**
* 出队方法
*
* @return 返回出来的Object
*/
public Object remove() {
// 先进先出,先进先出从下标0开始
if (number > getSize()) {
System.out.println("已经没有要出的队了!!!");
return 0;
}
Object temp = list.remove(number);
return temp;
}
/**
* 输出
*/
public void prlntlnFormat() {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < list.size(); i++) {
buffer.append(list.get(i) + "\t");
}
System.out.println(buffer);
}
public static void main(String[] args) {
Queue test = new Queue();
// 进队
test.add(1);
test.add(2);
test.add(3);
test.add(4);
test.add(5);
test.add(6);
test.add(7);
test.add(8);
test.prlntlnFormat();// 输出
System.out.println("出来的队伍是:" + test.remove());// 出队
test.prlntlnFormat();
}
}
堆栈:用集合,同理,先进后出
package Test;
import java.util.ArrayList;
import java.util.List;
public class TestStack {
// 实例化一个集合
private List list = new ArrayList();
private int size;// 得到集合的长度
/**
* 定义一个方法取得集合的长度
* @return 获的集合大小
*/
public int getSize() {
size = list.size();
return size;
}
/**
* 取栈顶元素
* @return 返回栈顶的值
*/
public Object getTop() {
// 第一个栈的对象的下标等于集合长度减1
Object obj = list.get(getSize() - 1);
return obj;
}
/**
* 进栈方法
* @param obj 提供一个元素
*/
public void push(Object obj) {
list.add(obj);// 添加任意类型
}
/**
* 出栈,先进后出
* @return 并返回出来的栈
*/
public Object pop()
{
//获得要出栈的下标
int number = list.size() - 1;
//出栈
Object obj = list.remove(number);
return obj;
}
//打印
public void print()
{
StringBuffer buffer = new StringBuffer();
for(int i = 0;i < list.size();i++)
{
buffer.append(list.get(i));
buffer.append("\t");
}
System.out.println(buffer);
}
//测试类
public static void main(String[] args) {
TestStack test = new TestStack();
//添加几个栈
test.push(1);
test.push(2);
test.push(3);
test.push(4);
test.print();
//取栈顶
System.out.println("栈顶为"+test.getTop());
//出栈
System.out.println("取出的栈为:"+test.pop());
System.out.println("栈的长度为:"+test.getSize());
test.print();
}
}
热心网友
时间:2023-07-16 02:49
没看懂问题追问就是给你一个class stack;
有两个method, push和pop (FILO)
要你用2个stack来编写一个class queue, 实现queue的push和pop (FIFO)
同理, 如果给你一个class queue (FIFO)
能不能实现stack的push和pop (FILO)