利用两个栈S1和S2来模拟一个队列,已知栈的4个运算定义如下
Push(S,x); Pop(S,x); StackEmpty(S); StackOverflow(S);
如何利用栈的运算来实现该队列的3个运算(形参由读者根据要求自己设计)
Enqueue;//将元素x入队 Dequeue;//出队,并将出队元素存储在x中 QueueEmpty;//判断队列是否为空
#include <iostream>
#include<stack>
typedef struct queue{
std::stack<int> s1;
std::stack<int> s2;
}queue;
bool enqueue(queue &q,int x)
{
q.s1.push(x);
return 1;
}
int dequeue(queue &q)
{
if(q.s2.empty()){
if(q.s1.empty()){
printf("the queue is empty\n");
return -1;
}else{
while(!q.s1.empty()) q.s2.push(q.s1.top()),q.s1.pop();//将s1的数据全部倒度s2中
}
}
int tmp=q.s2.top();
q.s2.pop();
return tmp;
}
bool queueempty(queue &q)
{
if(q.s1.empty()&&q.s2.empty()) return 1;
else return 0;
}
int main() {
queue q;
for(int i=0;i<10;i++) enqueue(q,i+1);
for(int i=0;i<10;i++) printf("%3d",dequeue(q));
puts("");
if(queueempty(q)) printf("the queue is empty\n");
for(int i=0;i<5;i++) enqueue(q,i+1);
for(int i=0;i<5;i++) printf("%3d",dequeue(q));
puts("");
if(queueempty(q)) printf("the queue is empty\n");
return 0;
}