用c语言编写一个程序,一个双向堆栈stack[M],从键盘输入一个数据,若输入的是奇数,则存入左栈;若输入的是偶数,则存入右栈,直到栈满为止。
时间: 2024-02-22 12:56:46 浏览: 114
好的,下面是程序的实现:
```c
#include <stdio.h>
#define M 100
int stack[M];
int left_top = -1; // 左栈栈顶
int right_top = M; // 右栈栈顶
int main() {
int data;
while (1) {
printf("请输入一个整数:");
scanf("%d", &data);
if (left_top + 1 == right_top) { // 栈满
printf("堆栈已满,结束输入!\n");
break;
}
if (data % 2 == 1) { // 奇数
if (left_top + 1 == right_top) { // 左栈已满
printf("左栈已满,无法插入!\n");
continue;
}
left_top++;
stack[left_top] = data;
} else { // 偶数
if (right_top - 1 == left_top) { // 右栈已满
printf("右栈已满,无法插入!\n");
continue;
}
right_top--;
stack[right_top] = data;
}
}
printf("左栈元素:");
for (int i = 0; i <= left_top; i++) {
printf("%d ", stack[i]);
}
printf("\n右栈元素:");
for (int i = M - 1; i >= right_top; i--) {
printf("%d ", stack[i]);
}
printf("\n");
return 0;
}
```
该程序使用了数组实现双向堆栈,通过 `left_top` 和 `right_top` 变量表示左栈和右栈的栈顶位置。每次从键盘输入一个数据,若输入的是奇数,则存入左栈;若输入的是偶数,则存入右栈。当栈满时,结束输入。最后输出左栈和右栈的元素。
阅读全文