剑指offer.用两个栈实现队列
Posted tingweichen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer.用两个栈实现队列相关的知识,希望对你有一定的参考价值。
请用栈实现一个队列,支持如下四种操作:
- push(x) – 将元素x插到队尾;
- pop() – 将队首的元素弹出,并返回该元素;
- peek() – 返回队首元素;
- empty() – 返回队列是否为空;
注意:
- 你只能使用栈的标准操作:
push to top
,peek/pop from top
,size
和is empty
; - 如果你选择的编程语言没有栈的标准库,你可以使用list或者deque等模拟栈的操作;
- 输入数据保证合法,例如,在队列为空时,不会进行
pop
或者peek
等操作;
样例
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // returns 1
queue.pop(); // returns 1
queue.empty(); // returns false
class MyQueue { public: /** Initialize your data structure here. */ stack<int> stack1,stack2; MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { stack1.push(x); } void copy(stack<int> &a, stack<int>& b){ while(a.size()){ b.push(a.top()); a.pop(); } } /** Removes the element from in front of queue and returns that element. */ int pop() { copy(stack1, stack2); int result = stack2.top(); stack2.pop(); copy(stack2,stack1); return result; } /** Get the front element. */ int peek() { copy(stack1, stack2); int result = stack2.top(); copy(stack2,stack1); return result; } /** Returns whether the queue is empty. */ bool empty() { return stack1.empty(); } }; /** * Your MyQueue object will be instantiated and called as such: * MyQueue obj = MyQueue(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.peek(); * bool param_4 = obj.empty(); */
以上是关于剑指offer.用两个栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章