【题目】
编写一个类,用两个栈实现队列,支持队列的基本操作(and、poll、peek)
【难度】
尉 二星
【解答】
- 栈的特点是先进后出,而队列的特点是先进先出
- 一个栈作为压入栈,在压入数据的时候我们只往这个栈中压入,记为 stackPush
- 一个栈作为弹出栈,在弹出数据的时候我们只从这个栈中弹出,记为 stackPop
- 保证以下两点
1. 如果 stackPush 要往 stackPop 里面压入数据,那么必须一次性全部压入 2. 如果 stackPop 不为空,stackPush 绝对不能往 stackPop 压入数据
【代码】
class TwoStackQueue { private Stack<int> stackPush; private Stack<int> stackPro; public TwoStackQueue() { stackPush = new Stack<int>(); stackPro = new Stack<int>(); } private void pushToPop() { if (stackPro.Count == 0) { while (stackPush.Count != 0) { stackPro.Push(stackPush.Pop()); } } } public void add(int number) { stackPush.Push(number); pushToPop(); } public int poll() { if (stackPro.Count == 0 && stackPush.Count == 0) { throw new Exception("Queue is empty"); } pushToPop(); return stackPro.Pop(); } public int peek() { if (stackPro.Count == 0 && stackPush.Count == 0) { throw new Exception("Queue is empty"); } pushToPop(); return stackPro.Peek(); } }