关闭

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

标签: 两个队列实现一个栈C++实现
254人阅读 评论(0) 收藏 举报
分类:
两个队列实现一个栈的思想:用_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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:59644次
    • 积分:2204
    • 等级:
    • 排名:第17857名
    • 原创:170篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论