用两个栈来回倒
package LinkList;
// 用栈实现队列 --两个栈来回倒
public class QueueByStack extends StackByArray { // 是一个栈,能用所有栈的属性和方法
StackByArray stack = new StackByArray(); // 用来倒栈中元素,该栈的出栈顺序与队列相同
public QueueByStack(){
super();
}
public QueueByStack(int len){
super(len);
stack.len = len;
}
public void enQueue(int a){
while(!stack.isEmpty()){
push(stack.pop()); // 入栈时,如果stack中有元素,则倒回原来的栈
}
push(a); // 入队
}
public int deQueue(){ // 出队
while(!isEmpty()){
stack.push(pop());
}
if(stack.isEmpty()){
System.out.println("队列为空!无法出队!");
return -1;
}
int a = stack.pop();
System.out.println("出队:" + a);
return a;
}
public void PrintQueue(){
while(!isEmpty()){
stack.push(pop());
}
if(stack.isEmpty()){
System.out.println("队列为空!");
return;
}
System.out.print("打印队列:队头");
for(int i = stack.top_flag -1;i >= 0;i--){
System.out.print(stack.arr[i] + "\t");
}
System.out.println("队尾");
}
public static void main(String[] args) {
QueueByStack queue = new QueueByStack(4);
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
queue.enQueue(4);
queue.enQueue(5);
queue.PrintQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.PrintQueue();
// System.out.println();
queue.enQueue(6);
queue.enQueue(7);
queue.deQueue();
queue.PrintQueue();
// System.out.println();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
}
}
输出
打印队列:队头1 2 3 4 5 队尾
出队:1
出队:2
出队:3
打印队列:队头4 5 队尾
出队:4
打印队列:队头5 6 7 队尾
出队:5
出队:6
出队:7
队列为空!无法出队!
队列为空!无法出队!
队列为空!无法出队!
队列为空!无法出队!
队列为空!无法出队!
队列为空!无法出队!
队列为空!无法出队!