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