在C++ STL中有雙向隊列deque,當單向的來用就行,設有兩個隊列A和B,棧的push操作,直接push到A的隊尾就行了。棧的pop操作時,將A中的隊列依次取出放到B中,取到最後一個時,最後一個不要放到B中,直接刪掉,再將B中的值依次放回A中。棧的top操作時,將A中的隊列依次取出放到B中,取到最後一個時,將最後一個值記錄下來,再將最後一個值放到B中,再將B中的值依次放回到A中。
- #include<stdafx.h>
- #include<iostream>
- #include <deque>
- using namespace std;
- template<class T> class Mystack
- {
- public:
- Mystack(){}
- ~Mystack(){}
- void push(T t);
- T top();
- void pop();
- private:
- deque<T> A;
- deque<T> B;
- };
- template<class T> void Mystack<T>::push(T t)
- {
- A.push_back(t);
- }
- template<class T> T Mystack<T>::top()
- {
- while(A.size()>1)
- {
- B.push_back(A.front());
- A.pop_front();
- }
- T tmp=A.front();
- B.push_back(A.front());
- A.pop_front();
- while(B.size()!=0)
- {
- A.push_back(B.front());
- B.pop_front();
- }
- return tmp;
- }
- template<class T> void Mystack<T>::pop()
- {
- while(A.size()>1)
- {
- B.push_back(A.front());
- A.pop_front();
- }
- A.pop_front();
- while(B.size()!=0)
- {
- A.push_back(B.front());
- B.pop_front();
- }
- }
- void main()
- {
- Mystack<int> a;
- for(int i=0;i<10;i++)
- a.push(i);
- for(int i=0;i<10;i++)
- {
- cout<<a.top()<<endl;
- a.pop();
- }
- }