队列的代码详情
双队列栈的代码
/**
* 双栈队列
* @author 14831
*
*/
public class TwoQueueStack {
/**
* 1号队列
*/
private LinkQueue q1 = new LinkQueue();
/**
* 2号队列
*/
private LinkQueue q2 = new LinkQueue();
/**
* 栈的长度
*/
private int size = 0;
/**
* 入栈
* @param val
*/
public void push(int val){
//先判别那个队为空,然后将队为空的赋值给q
LinkQueue q = q1.isEmpty()?q2:q1;
//将val入队到为空的队
q.Push(val);
//栈长度加一
size++;
}
/**
* 出栈
* @return
*/
public int pop()
{ //如果栈为空,返回-1
if(isEmpty())
{
return -1;
}
//找到不为空的赋值给q
LinkQueue q = q1.isEmpty()?q2:q1;
//找到为空的赋值给p
LinkQueue p = q1.isEmpty()?q1:q2;
//一直循环遍历直到q剩最后一个元素
while(q.getSize()>1){
//将不为空的队列里面的除了最后一个元素外
//全部入队到为空的队列中
p.Push(q.pop());
}
//栈长度减一
size--;
//返回q中剩余的最后一个元素
return q.pop();
}
/**
* 判断栈是否为空
* @return
*/
public boolean isEmpty() {
return size==0;
}
/**
* 打印栈内元素
*/
public void show()
{
if(isEmpty()){
System.out.println("栈为空");
return;
}
//获取不为空的栈
LinkQueue q = q1.isEmpty()?q2:q1;
//将其序列化为数组
int[] array = q.toArray();
//反向打印数组
for (int i = 0; i < array.length; i++) {
System.out.print(array[array.length-i-1]+" ");
}
System.out.println();
}
}
测试
public static void main(String[] args) {
TwoQueueStack t = new TwoQueueStack();
for (int i = 0; i < 5; i++) {
t.push(i);
}
t.show();
for (int i = 0; i < 5; i++) {
System.out.print(t.pop()+" ");
}
t.show();
}
结果
4 3 2 1 0
4 3 2 1 0 栈为空