#include<iostream>
#include<queue>
using namespace std;
template<typename T> class MyStack
{
public:
MyStack();
~MyStack();
void append(const T& node);
T deleteHead();
private:
queue<T> queue1;
queue<T> queue2;
};
//构造函数
template<typename T> MyStack<T>::MyStack()
{
}
//析构函数
template<typename T> MyStack<T>::~MyStack()
{
}
//插入元素
template<typename T> void MyStack<T>::append(const T& node)
{
if(queue1.size()>0)
queue1.push(node);
else if(queue2.size()>0)
queue2.push(node);
else
queue1.push(node);
}
//删除元素并返回出栈元素
template<typename T> T MyStack<T>::deleteHead()
{
if(queue1.size()==0)//如果queue1位空
{
while(queue2.size()>1)
{
int data=queue2.front();
queue1.push(data);
queue2.pop();
}
T& head=queue2.front();
queue2.pop();
return head;
}
else //如果queue2位空
{
while(queue1.size()>1) //保证queue1中有一个元素
{
int data=queue1.front();
queue1.pop();
queue2.push(data);
}
T& head=queue1.front();
queue1.pop();
return head;
}
}
int main()
{
MyStack<int> St;
St.append(1);
St.append(2);
St.append(3);
for(int i=0;i<3;i++)
cout<<St.deleteHead()<<endl;
return 0;
}
#include<queue>
using namespace std;
template<typename T> class MyStack
{
public:
MyStack();
~MyStack();
void append(const T& node);
T deleteHead();
private:
queue<T> queue1;
queue<T> queue2;
};
//构造函数
template<typename T> MyStack<T>::MyStack()
{
}
//析构函数
template<typename T> MyStack<T>::~MyStack()
{
}
//插入元素
template<typename T> void MyStack<T>::append(const T& node)
{
if(queue1.size()>0)
queue1.push(node);
else if(queue2.size()>0)
queue2.push(node);
else
queue1.push(node);
}
//删除元素并返回出栈元素
template<typename T> T MyStack<T>::deleteHead()
{
if(queue1.size()==0)//如果queue1位空
{
while(queue2.size()>1)
{
int data=queue2.front();
queue1.push(data);
queue2.pop();
}
T& head=queue2.front();
queue2.pop();
return head;
}
else //如果queue2位空
{
while(queue1.size()>1) //保证queue1中有一个元素
{
int data=queue1.front();
queue1.pop();
queue2.push(data);
}
T& head=queue1.front();
queue1.pop();
return head;
}
}
int main()
{
MyStack<int> St;
St.append(1);
St.append(2);
St.append(3);
for(int i=0;i<3;i++)
cout<<St.deleteHead()<<endl;
return 0;
}