【例】请利用两个栈s1和 s2来模拟一个队列,假设栈中元素为 int 型,栈中元素最多为maxSize。已知栈的3个运算定义如下。
如何利用栈的运算来实现该队列的3个运算:enQueue(元素入队列)、deQueue(元素出队列)、isQueueEmpty (判断队列是否为空,空返回1,不空返回0)。采用C语言描述算法
void enQueue(StStack &s1,StStack &s2,int x,int value){
if(isEmpty(s1)==0){ //说明 s1 不空,则先将其全放到 s2,再让 value 进栈
while(isEmpty(s1)==0){
pop(s1,&x);
push(s2,x);
}
}
push(s1,value);
while(isEmpty(s2)==0){
pop(s2,&x);
push(s1,x);
}
}
//出队
int deQueue(StStack &s1,int &x){
if(isEmpty(s1)==1)
return 0;
pop(s1,&x);
}
int isQueueEmpty(StStack s1){
isEmpty(s1);
}
总结:将 s2 当作跳板,为 s1 服务。不理解可以看点击看🖱️哔哩哔哩视频讲解