剑指 | 7-利用两个栈构建一个队列
2017-08-07 13:21
253 查看
题目描写叙述:http://ac.jobdu.com/problem.php?pid=1512
用两个栈来实现一个队列,完毕队列的Push和Pop操作。
队列中的元素为int类型。
解析:
定义2个栈s1, s2
1. 開始时。将元素push进s1
2. front()或pop()时,将s1的数据,出栈。顺序压入s2; 此时发现 s2 的出栈顺序即队列的出队列顺序。
3. 再次push时,仍然 push 进 s1
4. front()或pop()时,假设 s2 为空,则将 s1 的全部数据压入 s2
将 s1 作为入队列的栈,将 s2 作为出队列的栈,当 s2 为空时,将 s1 的全部内容压入 s2
用两个栈来实现一个队列,完毕队列的Push和Pop操作。
队列中的元素为int类型。
解析:
定义2个栈s1, s2
1. 開始时。将元素push进s1
2. front()或pop()时,将s1的数据,出栈。顺序压入s2; 此时发现 s2 的出栈顺序即队列的出队列顺序。
3. 再次push时,仍然 push 进 s1
4. front()或pop()时,假设 s2 为空,则将 s1 的全部数据压入 s2
将 s1 作为入队列的栈,将 s2 作为出队列的栈,当 s2 为空时,将 s1 的全部内容压入 s2
#include <iostream> #include <stack> using namespace std; template <class T> class MyQueue { private: stack<T> s1, s2; public: void push(T val) { s1.push(val); } T front() { if (s2.empty()) { if (s1.empty()) return -1; //队列为空,返回-1 while (s1.empty() == false) { s2.push(s1.top()); s1.pop(); } } return s2.top(); } void pop() { if (s2.empty()) { if (s1.empty()) return; while (s1.empty() == false) { s2.push(s1.top()); s1.pop(); } } s2.pop(); return; } }; int main() { MyQueue<int> q; q.push(1); q.push(2); int val = q.front(); q.pop(); cout << val << endl; q.push(3); q.pop(); val = q.front(); cout << val << endl; }
结果为: 1 3
相关文章推荐
- 剑指 | 7-利用两个栈构建一个队列
- 剑指offer--两个栈实现一个队列
- 【九度OJ1512】|【剑指offer7】用两个栈实现一个队列
- 【数据结构与算法C】利用两个栈S1S2模拟一个队列,用栈的基本操作实线EnQueue,DeQueue,QueueEmpty
- 【剑指offer】用两个栈实现一个队列,用两个队列实现一个栈
- 剑指offer 7---使用两个栈实现一个队列
- 【面试题】剑指Offer-7-两个栈实现一个队列
- 【剑指offer】两个队列实现一个栈
- Python剑指offer之两个栈实现一个队列-两个队列实现一个栈
- 【剑指offer】两个栈实现一个队列 push pop
- 剑指offer之面试题7用两个栈实现一个队列
- 《剑指 Offer》学习(2)—— 9_两个栈实现一个队列
- 剑指offer-两个栈实现一个队列
- 使用两个栈构建一个队列
- 剑指offer-用两个栈实现一个队列
- 利用两个栈实现一个队列(C++版)
- 《算法》第一章——利用两个栈实现一个队列的push和pop操作
- 【剑指offer】两个栈实现一个队列
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作
- 剑指offer_栈和队列---用两个栈实现一个队列