在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();
- }
- }