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