思路:从栈A入队列,从栈B出队列。(队列的2个最重要的操做,入队列,出队列。)ios
代码实现以下:ui
// QueueByStack.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include<stack>
#include<iostream>
using namespace std;
template<class T> class Queue {
public:
Queue(){}
virtual ~Queue(){}
void push(const T& e){
m_stackA.push(e);
}
void pop(){
if(m_stackB.empty()){
while(!m_stackA.empty()){
m_stackB.push(m_stackA.top());
m_stackA.pop();
}
}
m_stackB.pop();
}
size_t size() const{
return m_stackA.size()+m_stackB.size();
}
bool empty(){
return m_stackA.empty()&&m_stackB.empty();
}
T top(){
if(m_stackB.empty()){
while(!m_stackA.empty()){
m_stackB.push(m_stackA.top());
m_stackA.pop();
}
}
return m_stackB.top();
}
protected:
stack<T> m_stackA; //栈A
stack<T> m_stackB; //栈B
};
int _tmain(int argc, _TCHAR* argv[])
{
Queue<int> m_queue;
m_queue.push(1);
m_queue.push(2);
cout<<m_queue.top();
return 0;
}
复制代码
思路:
举个例子:有D-->C-->B-->A
数据依次入栈,输出顺序应该是A-->B-->C-->D
。
先将D-->C-->B-->A
入队列1,将C-->B-->A
弹出到队列2,只留一个,弹出D
;
再将队列2中全部数据入队列1,继续上面的步骤......
大致就这个思路。spa