/**
* 用队列实现栈
*/
public class QueueStack {
/**
* 队列A
*/
private Queue queueA;
/**
* 队列B
*/
private Queue queueB;
private int stackSize=10;
private int top;
/**
* 初始化
*/
public QueueStack(){
queueA = new ArrayDeque(stackSize);
queueB = new ArrayDeque(stackSize);
}
public QueueStack(int stackSize){
this.stackSize=stackSize;
queueA = new ArrayDeque(stackSize);
queueB = new ArrayDeque(stackSize);
}
/**
* 压栈,如果B队列不为空则将元素放入B队列,如果B队列为空,则不管A队列为不为空,都将元素放入A队列
* @param element
*/
public void push(int element){
if (!queueB.isEmpty()) {
queueB.add(element);
} else {
queueA.add(element);
}
}
/**
* 出栈,将不为空的队列中除队尾元素外的所有元素,出队到空队列中,最后将不为空队列的队尾元素出队
* @return
*/
public int pop(){
if(queueA.isEmpty()){
while(queueB.size()>1){
queueA.add(queueB.poll());
}
return (int)queueB.poll();
}
if(queueB.isEmpty()){
while(queueA.size()>1){
queueB.add(queueA.poll());
}
return (int)queueA.poll();
}
return -1;
}
/**
* 查看栈顶元素,将不为空队列中的所有元素依次出队到空队列,并在每次出队时都保存下这个元素,
* 最后element保存的一定是队尾元素,也就是栈顶元素,将这个元素返回
* @return
*/
public int peek(){
int element=0;
if(queueA.isEmpty()){
while (queueB.size()>0){
element= (int) queueB.poll();
queueA.add(element);
}
}
if(queueB.isEmpty()){
while(queueA.size()>0){
element= (int) queueA.poll();
queueB.add(element);
}
}
return element;
}
/**
* 如果AB队列都为空则认为栈空,返回true,否则返回false
* @return
*/
public boolean isEmpty(){
return queueA.isEmpty()&&queueB.isEmpty();
}
}
Java用两个队列实现顺序栈
最新推荐文章于 2022-04-15 00:07:30 发布