两个队列实现栈

来源:互联网 发布:网络视频如何下载 编辑:程序博客网 时间:2024/06/03 15:29

  在实现栈转换为队列后,现在可以用两个队列实现一个栈,就是将“先进先出”改为“先进后出”的方式,实现的基本思路是用一个队列保存数据,当储存数据的队列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;
};
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;
 }
 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;

}



原创粉丝点击