两个栈模拟一个队列,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;
-
-
}
两个栈模拟一个队列
原文:http://blog.csdn.net/u014082714/article/details/44806597