用两个栈实现一个队列
2016-05-08 21:20
225 查看
题目:用两个栈实现一个队列,实现头删和尾插的功能。
思路:栈是先进后出,队列是先进先出。用两个栈InsertStack和TmpStack。如果要插入数据就只往InsertStack中插。删除数据时,如果TmpStack为空,则将InsertStack中的数据逐个拿出来,插入到TmpStack中,这样先入InsertStack栈的元素,就被翻转到TmpStack的栈顶,就可以在TmpStack中直接删除元素。
思路:栈是先进后出,队列是先进先出。用两个栈InsertStack和TmpStack。如果要插入数据就只往InsertStack中插。删除数据时,如果TmpStack为空,则将InsertStack中的数据逐个拿出来,插入到TmpStack中,这样先入InsertStack栈的元素,就被翻转到TmpStack的栈顶,就可以在TmpStack中直接删除元素。
#include<iostream> #include<stack> using namespace std; template<typename T> class Queue { public: Queue(){} ~Queue(){} void PushTail(const T& value); void PopHead(); private: stack<T> InsertStack; stack<T> TmpStack; }; template<typename T> void Queue<T>::PushTail(const T& value) { InsertStack.push(value); cout << "Insert " << value << " success" << endl; } template<typename T> void Queue<T>::PopHead() { if (TmpStack.empty()) { while (!InsertStack.empty()) { T tmp = InsertStack.top(); TmpStack.push(tmp); InsertStack.pop(); } } if (TmpStack.size() == 0) { cout << "Queue is empty" << endl; return ; } T PopValue = TmpStack.top(); TmpStack.pop(); cout << "Pop value is " << PopValue << endl; } void Test() { Queue<int> q; q.PushTail(1); q.PushTail(2); q.PushTail(3); q.PopHead(); q.PopHead(); q.PopHead(); q.PopHead(); } int main() { Test(); getchar(); return 0; }
相关文章推荐
- 20150320--负载均衡+ob缓存-01
- 第十周进度条
- 66.JAVA编程思想——网络编程
- Shiny Apps Gallery using Plotly in R
- 65.JAVA编程思想——关于Runnable
- 嵌入式--驱动分离分层
- 64.JAVA编程思想——优先级
- CodeForces 666B. World Tour【BFS】
- 创建基础场景---基于WebGL的H5 3D游戏引擎BabylonJS
- [iOS] stringWithFormat 和 initWithFormat 有何不同?
- 图片服务器fastDFS的搭建以及配置
- 学习心得 六
- Java变参、C/C++/Objective_C变参
- PHP底层的运行机制与原理
- 63.JAVA编程思想——死锁
- Trapping Rain Water
- 【一天一道LeetCode】#44. Wildcard Matching
- 【一天一道LeetCode】#44. Wildcard Matching
- for_each()算法的使用
- 字符串排序(nyoj 1149)