您的位置:首页 > 编程语言 > C语言/C++

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

2015-11-19 20:49 666 查看
[align=left]两个队列实现一个栈的思想:用_PushQ1队列作为push数据的队列,用_TmpQ2队列暂存数据[/align]

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

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

(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;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: