两个栈实现一个队。
2016-05-02 13:45
316 查看
思路:
入队:
只将栈s1作为入队。
出队:
将栈s2作为出队,如果栈s1不为空,s2为空,出队时将s1的元素倒入s2中,再pop();
否则s2不为空,出队时直接在栈s2中pop();
本文出自 “liveyoung” 博客,转载请与作者联系!
入队:
只将栈s1作为入队。
出队:
将栈s2作为出队,如果栈s1不为空,s2为空,出队时将s1的元素倒入s2中,再pop();
否则s2不为空,出队时直接在栈s2中pop();
#include<iostream> #include<stack> #include<assert.h> using namespace std; template<class T> class Queue { public: Queue() :_size(0) {} void appendTail(T num) { s1.push(num); _size++; } void deleteHead() { assert(_size>0); if(s2.empty()) { while(s1.size()!=1) { s2.push(s1.top()); s1.pop(); } s1.pop(); } else { s2.pop(); } _size--; } T& top() { assert(_size>0); if(s2.empty()) { while(s1.size()!=1) { s2.push(s1.top()); } return s1.top(); } else { return s2.top(); } } private: stack<T> s1; stack<T> s2; int _size; }; int main() { Queue<int> q; q.appendTail(1); q.appendTail(2); q.appendTail(3); q.appendTail(4); q.deleteHead(); q.deleteHead(); q.deleteHead(); q.deleteHead(); q.appendTail(5); cout<<q.top()<<endl; system("pause"); return 0; }
本文出自 “liveyoung” 博客,转载请与作者联系!
相关文章推荐
- 事件原理
- TXT有声小说
- Windows常用快捷键
- 【AKOJ】1184-ASCII码排序(2)
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 通过导航栏进入多个视图
- SpringData 学习(4)—— 使用 @Query 注解实现查询
- [从头学数学] 第202节 矩阵与变换
- c/c++在windows下获取时间和计算时间差的几种方法总结
- Oracle自定义异常的使用
- 多项式相加
- Leetcode #344. Reverse String 逆转字符串 解题报告
- Codeforces Round #200 (Div. 1)D. Water Tree 【dfs序+线段树】
- java数组排序,二分查找
- 一种解决h5页面背景音乐不能自动播放的方案
- C语言有参函数调用时参数间数据传递问题
- am335x i2c分析
- Ubuntu 16.04如何安装Cinnamon 3.0
- 周末来一发之五一周赛
- java concurrent 之 SynchronousQueue