在实现栈转换为队列后,现在可以用两个队列实现一个栈,就是将“先进先出”改为“先进后出”的方式,实现的基本思路是用一个队列保存数据,当储存数据的队列pop到只剩一个数据时,函数pop
#include<iostream> //两个队列实现一个栈
#include<cstdlib>
#include<queue>
#include<cassert>
using namespace std;
template<class T>
class Stack
{
public:
void Push(const T& data);
void Pop();
private:
queue<T> q1;
queue<T> q2;
};
#include<cstdlib>
#include<queue>
#include<cassert>
using namespace std;
template<class T>
class Stack
{
public:
void Push(const T& data);
void Pop();
private:
queue<T> q1;
queue<T> q2;
};
template<class T>
void Stack<T>::Push(const T& data)
{
if(!q1.empty()) //q1不为空
q1.push(data);
else
q2.push(data);
}
template<class T>
void Stack<T>::Pop()
{
assert(q1.size()+q2.size());
queue<T>* tmp1=NULL;
queue<T>* tmp2=NULL;
if(q1.empty()) //q1为空
{
tmp2=&q1;
tmp1=&q2;
void Stack<T>::Push(const T& data)
{
if(!q1.empty()) //q1不为空
q1.push(data);
else
q2.push(data);
}
template<class T>
void Stack<T>::Pop()
{
assert(q1.size()+q2.size());
queue<T>* tmp1=NULL;
queue<T>* tmp2=NULL;
if(q1.empty()) //q1为空
{
tmp2=&q1;
tmp1=&q2;
}
else
{
tmp2=&q2;
tmp1=&q1;
else
{
tmp2=&q2;
tmp1=&q1;
}
while(tmp1->size()>1)
{
tmp2->push(tmp1->front());
tmp1->pop();
}
cout<<tmp1->front();
tmp1->pop();
}
int main()
{
Stack<int> s;
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
s.Pop();
s.Pop();
s.Pop();
s.Pop();
system("pause");
return 0;
}
while(tmp1->size()>1)
{
tmp2->push(tmp1->front());
tmp1->pop();
}
cout<<tmp1->front();
tmp1->pop();
}
int main()
{
Stack<int> s;
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
s.Pop();
s.Pop();
s.Pop();
s.Pop();
system("pause");
return 0;
}