两个队列实现栈
队列先进先出
栈先进后出
入栈:直接入不为空的队列
出栈:queue1,和queue2,每次出不为空的,先将不为空的队列出队列到为空的队列,出size-1个,剩下的一个就是队列的最后一个元素,直接出队,最后一个出队的元素也是最后一个插入的元素,实现了栈的先进后出。
具体代码如下:
class solution {
//两个队列实现栈
private MyQueueImpl myQueue1;
private MyQueueImpl myQueue2;
private int UseSize;
public TestStack() {
myQueue1 = new MyQueueImpl();
myQueue2 = new MyQueueImpl();
}
public void push(int x){
if(!myQueue1.empty()){
myQueue1.add(x);
}else if(!myQueue2.empty()){
myQueue2.add(x);
}else{
myQueue1.add(x);
}
this.UseSize++;
}
//返回栈顶元素,并且出栈
public int pop(){
int data;
if(!myQueue1.empty()){
for(int i = 0;i<UseSize-1;i++){
myQueue2.add(myQueue1.poll());
}
data= myQueue1.poll();
}else {
for(int i = 0;i<UseSize-1;i++){
myQueue2.add(myQueue2.poll());
}
data= myQueue2.poll();
}
UseSize--;
return data;
}
//返回栈顶元素,但不出栈
public int top(){
int data = 0;
if(!myQueue1.empty()){
for(int i = 0;i<UseSize-1;i++){
data= myQueue1.poll();
myQueue2.add(data);
}
}else {
for(int i = 0; i<UseSize; i++){
data= myQueue2.poll();
myQueue1.add(data);
}
}
return data;
}
//判断这个栈是否为空
public boolean isEmpty(){
return this.UseSize==0;
}
}