//两个栈实现一个队列
/*
#include <iostream>
#include <stack>
using namespace std;
template<class T>
class Queue
{
public:
void Push(const T& x)
{
_PushStack.push(x);
}
void Pop()
{
if (_PopStack.empty())
{
while (!_PushStack.empty())
{
_PopStack.push(_PushStack.top());
_PushStack.pop();
}
}
if (!_PopStack.empty())
{
cout << _PopStack.top() << " ";
_PopStack.pop();
}
}
private:
stack<T> _PushStack;
stack<T> _PopStack;
};
int main()
{
Queue<int> q1;
q1.Push(1);
q1.Push(2);
q1.Push(3);
q1.Push(4);
q1.Push(5);
q1.Push(6);
q1.Pop();
q1.Pop();
q1.Pop();
q1.Pop();
q1.Pop();
q1.Pop();
return 0;
}
*/
//使用两个队列实现一个栈
#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;
};
int main()
{
Stack s1;
s1.Push(1);
s1.Push(2);
s1.Push(3);
s1.Push(4);
s1.Push(5);
s1.Push(6);
cout << s1.Top() << " ";
s1.Pop();
cout << s1.Top() << " ";
s1.Pop();
cout << s1.Top() << " ";
s1.Pop();
cout << s1.Top() << " ";
s1.Pop();
cout << s1.Top() << " ";
s1.Pop();
cout << s1.Top() << " ";
s1.Pop();
return 0;
}栈(二)
最新推荐文章于 2025-03-23 18:16:41 发布
本文介绍如何通过两个栈实现一个队列的功能,并展示了如何利用两个队列来模拟栈的行为。通过这两种方法,可以更好地理解数据结构之间的转换与应用。

&spm=1001.2101.3001.5002&articleId=52626191&d=1&t=3&u=0244c4fa8fa445e781b842a4224b0c35)
3969

被折叠的 条评论
为什么被折叠?



