两个栈模拟一个队列

来源:互联网 发布:如何更改本机端口号 编辑:程序博客网 时间: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;}

原创粉丝点击