剑指offer--两个栈实现一个队列
2017-04-05 22:36
288 查看
两个队列实现一个栈链接:两个队列实现一个栈
栈:先进后出; 队列:先进先出。
思路:
我们可以利用两个栈,s1,s2。首先入队时,在s1入栈。如果想要出队,首先判断栈s2是否为空,如为空,把s1的元素压入s2;即,s1栈底的元素就到了s2的栈顶,就可以pop出去。若不为空,直接s2 pop;若入队,直接入栈s1,当出队时,如果s2不为空就pop s2,如果s2为空,就把s1的元素导入s2。
例如:
栈:先进后出; 队列:先进先出。
思路:
我们可以利用两个栈,s1,s2。首先入队时,在s1入栈。如果想要出队,首先判断栈s2是否为空,如为空,把s1的元素压入s2;即,s1栈底的元素就到了s2的栈顶,就可以pop出去。若不为空,直接s2 pop;若入队,直接入栈s1,当出队时,如果s2不为空就pop s2,如果s2为空,就把s1的元素导入s2。
例如:
#include<iostream> #include<stack> #include<assert.h> using namespace std; template<class T> class Queue { public: void Push(const T& x) { s1.push(x); } void Pop() { if (s2.empty()) { if (s1.empty())//队列为空 { assert(false); } else { //把S1的数据导入s2; while (!s1.empty()) { s2.push(s1.top()); s1.pop(); } } s2.pop(); } } protected: stack<T> s1; stack<T> s2; }; void Test() { Queue<int> q; q.Push(1); q.Push(2); q.Push(3); q.Push(4); q.Pop(); } int main() { Test(); system("pause"); return 0; }
相关文章推荐
- 剑指offer之面试题7用两个栈实现一个队列
- 剑指offer-用两个栈实现一个队列
- 剑指offer-09 用两个栈来实现一个队列
- 【剑指Offer】JS实现两个队列表示一个栈
- 剑指offer—编程题7(用两个栈实现一个队列)
- 【面试题】剑指Offer-7-两个栈实现一个队列
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作
- Python剑指offer之两个栈实现一个队列-两个队列实现一个栈
- 【剑指offer】两个队列实现一个栈
- 剑指offer-两个栈实现一个队列
- 【剑指Offer】两个栈实现一个队列
- 【九度OJ1512】|【剑指offer7】用两个栈实现一个队列
- 【剑指offer】两个栈实现一个队列
- 【剑指offer】两个栈实现一个队列
- 剑指offer 7---使用两个栈实现一个队列
- 剑指offer:用两个栈实现队列、用两个队列实现一个栈(java)
- 剑指offer-两个栈实现一个队列
- 《剑指 Offer》学习(2)—— 9_两个栈实现一个队列
- 【剑指offer】【7】两个栈实现队列及两个队列实现一个栈
- 【剑指offer】两个栈实现一个队列 push pop