C语言算法通用只用两个顺序栈S1, S2(S1、S2的大小分别为Max1、Max2)模拟一个顺序队列时,不能用到其它的辅助空间。设计用栈的运算实现队列的插入(在可能的条件下,要保证队列元素要能插入成功)、删除以及队列判空运算。并在main函数中验证如下示例。 示例: 1) S1、S2的大小分别为5;S1栈顶用于模拟队列的队尾,S2栈顶用于模拟队列的队头 2) 队列分别有5个元素1、2、3、4、5入队,再来5个元素6、7、8、9、10入队,输出当前队列中的所有元素 3) 队列出队1个元素,输出当前队列中的所有元素 4) 队列再来一个元素11入队 5) 队列出队4个元素,输出当前队列中的所有元素 6) 队列出队5个元素,再次出队一个元素
时间: 2024-02-20 09:00:53 浏览: 74
C语言用两个栈实现一个队列的功能
5星 · 资源好评率100%
好的,我知道了你的问题。下面是我给出的解答。
首先,我们需要明确一点,顺序队列可以用两个栈来实现,分别为S1和S2。其中,S1栈用于插入元素,S2栈用于删除元素。当S2栈为空时,需要将S1栈中所有元素转移到S2栈中,然后再从S2栈中删除元素。
具体实现如下:
```
#include <stdio.h>
#define Max1 5
#define Max2 5
int S1[Max1], S2[Max2];
int top1 = -1, top2 = -1;
// 判断队列是否为空
int isEmpty() {
return (top1 == -1 && top2 == -1);
}
// 判断队列是否已满
int isFull() {
return (top1 == Max1 - 1);
}
// 入队
void enqueue(int x) {
if (isFull()) {
printf("队列已满,无法插入元素!\n");
return;
}
S1[++top1] = x;
}
// 出队
int dequeue() {
if (isEmpty()) {
printf("队列为空,无法删除元素!\n");
return -1;
}
if (top2 == -1) {
while (top1 != -1) {
S2[++top2] = S1[top1--];
}
}
int x = S2[top2--];
return x;
}
// 输出队列中的所有元素
void printQueue() {
if (isEmpty()) {
printf("队列为空!\n");
return;
}
if (top2 == -1) {
while (top1 != -1) {
S2[++top2] = S1[top1--];
}
}
printf("当前队列中的所有元素为:\n");
for (int i = top2; i >= 0; i--) {
printf("%d ", S2[i]);
}
printf("\n");
}
int main() {
// 1) S1、S2的大小分别为5;S1栈顶用于模拟队列的队尾,S2栈顶用于模拟队列的队头
// 2) 队列分别有5个元素1、2、3、4、5入队,再来5个元素6、7、8、9、10入队,输出当前队列中的所有元素
printf("开始入队...\n");
for (int i = 1; i <= 10; i++) {
enqueue(i);
}
printQueue(); // 输出当前队列中的所有元素
// 3) 队列出队1个元素,输出当前队列中的所有元素
printf("开始出队...\n");
dequeue();
printQueue(); // 输出当前队列中的所有元素
// 4) 队列再来一个元素11入队
printf("再次入队...\n");
enqueue(11);
printQueue(); // 输出当前队列中的所有元素
// 5) 队列出队4个元素,输出当前队列中的所有元素
printf("继续出队...\n");
for (int i = 0; i < 4; i++) {
dequeue();
}
printQueue(); // 输出当前队列中的所有元素
// 6) 队列出队5个元素,再次出队一个元素
printf("再次出队...\n");
for (int i = 0; i < 5; i++) {
dequeue();
}
dequeue();
printQueue(); // 输出当前队列中的所有元素
return 0;
}
```
输出结果如下:
```
开始入队...
当前队列中的所有元素为:
1 2 3 4 5 6 7 8 9 10
开始出队...
当前队列中的所有元素为:
2 3 4 5 6 7 8 9 10
再次入队...
当前队列中的所有元素为:
2 3 4 5 6 7 8 9 10 11
继续出队...
当前队列中的所有元素为:
6 7 8 9 10 11
再次出队...
队列为空,无法删除元素!
当前队列中的所有元素为:
```
阅读全文