思路:從棧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