两个栈模拟一个队列
来源:互联网 发布:如何更改本机端口号 编辑:程序博客网 时间:2024/04/30 04:42
两个栈模拟一个队列,1号栈为入队,栈顶表示队尾;2号栈为出队,栈顶表示队首。
入队,直接进1号栈;出队,先判断2号栈是否有元素,有元素就直接弹出栈顶即队首,如果2号栈没有元素,则将1号栈的元素顺序弹出并进2号栈。
#include <iostream>#include <stack>#include <assert.h>using namespace std;template<typename T>class CQueue{public:CQueue(){}~CQueue(){}void appendTail(const T& node);//入队void deleteHead();//出队T front();//取队首private:stack<T> m_stack1;stack<T> m_stack2;};template<typename T>void CQueue<T>::appendTail(const T& node){m_stack1.push(node);}template<typename T>void CQueue<T>::deleteHead(){if(m_stack2.empty()){while(!m_stack1.empty()){m_stack2.push(m_stack1.top());m_stack1.pop();}}assert(m_stack2.size()>0);m_stack2.pop();}template<typename T>T CQueue<T>::front(){if(m_stack2.empty()){while(!m_stack1.empty()){m_stack2.push(m_stack1.top());m_stack1.pop();}}assert(m_stack2.size()>0);return m_stack2.top();}void main(){CQueue<int> q;q.appendTail(13);q.appendTail(41);q.appendTail(86);q.appendTail(90);q.appendTail(32);cout<<q.front()<<"出队"<<endl;q.deleteHead();cout<<"队首:"<<q.front()<<endl;}
- 两个栈模拟一个队列/两个队列模拟一个栈
- 两个栈模拟一个队列
- 两个队列模拟一个栈
- 两个队列模拟一个栈
- 两个队列模拟一个栈
- 两个栈模拟一个队列
- 两个队列模拟一个栈
- 两个栈模拟一个队列
- 两个队列模拟一个栈
- 两个栈模拟一个队列
- 两个栈模拟一个队列
- 用两个栈模拟一个队列
- 【100题】两个栈模拟一个队列
- 用两个栈模拟一个队列
- 3.5-两个栈模拟一个队列
- 用两个队列模拟一个栈
- 用两个栈模拟一个队列
- 两个栈模拟实现一个队列
- Guid
- Qt链接Ws2_32.lib
- Microsoft Excel 常量(上)
- SqlServer复杂Sql执行
- time
- 两个栈模拟一个队列
- 寻找二叉树两节点的最近的公共祖先[转载+整理]
- 《看日记学git》
- VoIP中G.729与G.711的部分资料
- AndEngine Tutorial: Touch & Drag Sprites
- Microsoft Excel 常量(下)
- 毕业季挚言
- ubuntu12.04中shell脚本无法使用source的原因及解决方法
- Modernizr 检测浏览器是否支持HTML5元素