用两个栈实现一个队列
1 . 一个栈用来做存储空间,一个用来做缓冲空间。
Stack s1 = new Stack();//作为存储空间
Stack s2 = new Stack();//作为缓冲空间
2.队列的基本操作。
a .判断队列是否为满:也就是判断栈 s1 是否为满。
public boolean isFull(){ return s1.isFull(); }
b . 入队:将队列元素插入到 s1 的栈顶。
public void push(int val){ if(s1.isFull()){ return; } s1.push(val); }
c . 判断队列是否为空:也就是判断栈 s1 是否为空。
public boolean isEmpty(){ return s1.isEmpty(); }
d . 出队:根据队列先进先出的特点,出队的元素即为栈 s1 的栈底元素。
如图:先将 s1 的元素全部出栈,放入 s2 中,只留下栈底元素,然后将 s2 的元素有依次放回 s1 ,覆盖点原来的栈底元素。
public void pop(){ int tmp; if(s1.isEmpty()){ return; } while(s1.top > 1){ tmp = s1.getTop(); s2.push(tmp); s1.top--; } s1.top = 0; while(!s2.isEmpty()){ tmp = s2.getTop(); s1.push(tmp); s2.top--; } }
e . 得到队顶元素:队顶元素即为 s1 的栈底元素。
public int getTop(){ if(s1.isEmpty()){ return -1; } return s1.elem[0]; }
f . 输出队列元素:依次输出栈 s1 的元素。
public void show(){ s1.show(); }