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

原创 2015年11月19日 20:49:26
两个队列实现一个栈的思想:用_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;
}



C++算法之 两个队列实现一个栈

题目:用两个队列实现一个栈 算法思路: 现有两个队列q1与q2,入栈:如果q1与q2都为空,那么我们选择q1入栈也就是入队列,比如q1入栈 1 2 3 4 ;现在要出栈,后进先出那么4要出栈。但是...
  • djb100316878
  • djb100316878
  • 2014年12月09日 10:48
  • 9883

C++两个栈实现一个队列和两个队列实现一个栈

今天用C++实现了下两个栈模拟一个队列和两个队列模拟一个栈!代码可能有很多漏洞,如果读者发现问题, 可以及时反馈,非常感谢!!!         代码如下: #include #include...
  • qianghaohao
  • qianghaohao
  • 2016年05月04日 22:11
  • 885

【C++面试题】利用两个栈实现1个队列

1、题目   利用两个栈实现一个队列    2、要求   只能使用栈的pop(),top()和push(),以及测试栈是否为空empty()四个操作. 来实现队列的empty(), ...
  • liulongling
  • liulongling
  • 2016年02月19日 11:03
  • 1924

两个栈来实现一个队列的C++代码(某公司社会早笔试题)

利用两个栈来实现一个队列, 这个问题很常见。  最关键的是要有好的思路, 至于实现, 那是很简单的事情了。 在本文中, 也想说说自己的思路, 但是, 我觉得用代码来表述思路更符合我的习惯, 也是我的菜...
  • stpeace
  • stpeace
  • 2015年07月05日 23:35
  • 3978

剑指offer《面试题7:用两个栈实现队列》及用两个队列实现一个栈

栈和队列是两个特点相反的数据结构,但联系非常密切。 栈的特点就是“后进先去”,即是最后被压入(push)的栈元素会被第一个弹出(pop)。 队列的特点就是“先进先出”,即是第一个进...
  • SingleLegCat
  • SingleLegCat
  • 2015年07月15日 00:40
  • 1374

两个栈实现队列+两个队列实现栈----java

两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后全部出stack1并进入stack2.实现队列的先进先出即:若stack2非空,我们需要的恰好...
  • u010093630
  • u010093630
  • 2014年08月08日 00:52
  • 10060

Python :用两个栈实现队列

牛客网上的剑指 offer的在线编程: 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 # -*- coding:utf-8 -*- class...
  • Lynette_bb
  • Lynette_bb
  • 2017年07月13日 21:17
  • 732

两个栈实现一个队列,两个队列实现一个栈

问题1:用两个栈实现一个队列,实现队列的push和delete操作 栈的特性是先进后出(FILO),队列的特性是先进先出(FIFO),在实现delete时,我们的难点是如何将栈中最底层的数据拿出来,...
  • zw_1510
  • zw_1510
  • 2016年07月17日 00:32
  • 4105

剑指Offer面试题7(Java版):用两个栈实现队列与用两个队列实现栈

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。 我们通过一个具体的例子来分析该队列插...
  • jsqfengbao
  • jsqfengbao
  • 2015年07月27日 19:25
  • 2537

【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)

使用两个栈实现一个队列思路一:我们设定s1是入栈的,s2是出栈的。入队列,直接压到s1即可出队列,先把s1中的元素倒入到s2中,弹出s2中的栈顶元素;再把s2的剩余元素全部倒回s1中。650) thi...
  • hanjing_1995
  • hanjing_1995
  • 2016年05月30日 17:18
  • 1176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【C++】两个队列实现一个栈
举报原因:
原因补充:

(最多只允许输入30个字)