【C++】两个队列实现一个栈

来源:互联网 发布:linux开启udp端口 编辑:程序博客网 时间:2024/06/07 07:18
两个队列实现一个栈的思想:用_PushQ1队列作为push数据的队列,用_TmpQ2队列暂存数据

1.只要是对栈进行push操作,就将数据push入_PushQ1队列中。
2.要实现栈的pop操作,就要在_PushQ1队列或_TmpQ2队列不为空的情况下:
(1)若_PushQ1队列为空,而_TmpQ2队列不为空时,则swap(_TmpQ2, _PushQ1),便得_PushQ1队列不为空,_TmpQ2队列为空。否则直接转(2)

 (2)把_PushQ1队列中的数据按照队列的pop规则,都转移到_TmpQ2队列中,直到_PushQ1中的数据只有一个时结束转移。

 (3)执行完步骤(2)后,对_PushQ1队列中仅剩的那一个数据执行pop操作,就是所要实现的栈的pop操作。
#include<iostream>#include<queue>using namespace std;class Stack{public:           void Push(const int & x)          {                   _PushQ1 .push( x);          }           void Pop()          {                    if (!Empty())                   {                              if (_PushQ1 .empty() && !_TmpQ2 .empty())                             {                                      swap(_PushQ1 , _TmpQ2 );                             }                                                           int size = _PushQ1 .size();                              while (--size)                             {                                      _TmpQ2 .push(_PushQ1 .front());                                      _PushQ1 .pop();                             }                             _PushQ1 .pop();                                                }          }           const int & Top()          {                    if (!Empty())                   {                              if (_PushQ1 .empty() && !_TmpQ2 .empty())                             {                                      swap(_PushQ1 , _TmpQ2 );                             }                              int size = _PushQ1 .size();                              while (--size)                             {                                      _TmpQ2 .push(_PushQ1 .front());                                      _PushQ1 .pop();                             }                              return _PushQ1 .front();                   }          }           bool Empty()          {                    return _PushQ1 .empty() && _TmpQ2 .empty();          }private:           queue<int >_PushQ1 ;           queue<int >_TmpQ2 ;};
<pre name="code" class="cpp">void Test(){Stack s;s.Push(1);s.Push(2);s.Push(3);s.Push(4);s.Push(5);s.Push(6);s.Pop();s.Pop();s.Pop();s.Push(100);s.Pop();s.Pop();s.Pop();}int main(){Test();system("pause");return 0;}


0 0
原创粉丝点击