用c语言编写两个顺序栈S1, S2(S1、S2的大小分别为Max1、Max2)模拟一个顺序队列时,不能用到其它的辅助空间
时间: 2024-02-20 19:01:03 浏览: 72
C语言经典算法
C语言实现两个栈模拟一个队列可以参考以下代码,其中栈S1用于入队操作,栈S2用于出队操作:
```c
#include <stdio.h>
#define Max1 10
#define Max2 10
int stack1[Max1];
int stack2[Max2];
int top1 = -1;
int top2 = -1;
int is_empty() {
return top1 == -1 && top2 == -1; // 如果两个栈都为空,说明队列为空
}
int is_full() {
return top1 == Max1 - 1; // 如果栈S1已满,说明队列已满
}
int push(int value) {
if (is_full()) {
return 0; // 插入失败
}
top1++;
stack1[top1] = value;
return 1; // 插入成功
}
int pop() {
if (is_empty()) {
return -1; // 删除失败
}
if (top2 == -1) { // 如果栈S2为空,需要将栈S1中的元素倒入栈S2中
while (top1 >= 0) {
top2++;
stack2[top2] = stack1[top1];
top1--;
}
}
int value = stack2[top2]; // 弹出栈S2的栈顶元素
top2--;
return value;
}
int main() {
push(1);
push(2);
push(3);
printf("%d\n", pop()); // 输出1
printf("%d\n", pop()); // 输出2
push(4);
push(5);
printf("%d\n", pop()); // 输出3
printf("%d\n", pop()); // 输出4
printf("%d\n", pop()); // 输出5
printf("%d\n", pop()); // 输出-1,队列为空
return 0;
}
```
其中,is_empty()和is_full()用于判断队列是否为空和是否已满,push()用于插入元素,pop()用于删除元素。
阅读全文