今天研究一下,如何在C++中,使用2个stack实现一个queue。
注:stack是后入先出的,queue是先入先出的。
queue只能在队列一端输入元素,另一端输出元素,不可以反过来。deque可以在2端分别进行输入和输出。
本代码是用2个栈实现一个简单的queue,包括入队、出队操作。
代码如下:
#include <iostream>
#include <stack>
#include <climits>
using namespace std;
struct MyQueue
{
public:
void inQueue(int ele)
{
s1.push(ele);
}
int outQueue()
{
if(s2.empty())
{
while(!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
if(!s2.empty())//空栈调用pop()函数会导致未定义的行为,但是不会抛出异常,所以无法用try-catch()函数捕获
{
int out = s2.top();
s2.pop();
return out;
}
else
{
cout << "Queue is empty! ERROR" << endl;
return INT_MAX;
}
}
private:
stack<int> s1;
stack<int> s2;
};
int main()
{
MyQueue qe;
qe.inQueue(1);
qe.inQueue(2);
qe.inQueue(3);
cout << qe.outQueue() << endl;
cout << qe.outQueue() << endl;
dq.inQueue(4);
cout << qe.outQueue() << endl;
cout << qe.outQueue() << endl;
cout << qe.outQueue() << endl;
}
代码输出是:
1
2
3
4
Queue is empty! ERROR
2147483647