剑指 | 7-利用两个栈构建一个队列
2015-07-25 21:35
501 查看
题目描述: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
相关文章推荐
- 【LeetCode】240. Search a 2D Matrix II
- Ubuntu下的PHP开发环境架设
- STMCUBE——8频率计
- spring-boot 添加JSP页面功能
- [UVA10410]Tree Reconstruction[BFS、DFS序建树]
- int main(int argc, char*argv[])
- BZOJ 1045 糖果传递
- Java框架篇---Mybatis 构建SqlSessionFactory
- C++ 打印矩阵
- MATLAB图像函数 块和邻域的处理
- mysql查询练习
- 找出数组中第二大的数
- 减脂日记-02
- JAVA笔记之数据与运算
- 关于怎么向Xcode6 IOS8之后向项目中添加预编译文件
- 使用渐进式JPG改善用户体验
- (WPF)属性值继承
- git自学
- POJ 1979---B - 广搜/深搜 基础
- a byte of vim -- 学习摘要