用C语言写设从键盘输入一个整数序列:a1,a2,a3,……an。编写算法用栈结构 存储输入的整数,当 ai≠-1 时,将 ai 进栈。当 ai=-1 时,输出栈顶整数并 出栈。算法应对异常情况(入栈满等)给出相应的信息
时间: 2024-10-20 18:13:09 浏览: 104
设有n个正整数,将他们连接成一排,组成一个最大的多位整数
在C语言中,你可以使用数组或链表作为栈的数据结构来实现这个功能。这里以数组为例,我们首先需要定义一个栈以及一些辅助变量。假设栈的最大容量为MAX_SIZE。下面是步骤:
1. 定义栈结构体,包含一个整型数组和两个指针,top表示栈顶元素的位置,size表示当前栈内元素的数量。
```c
#define MAX_SIZE 100
typedef struct {
int stack[MAX_SIZE];
int top;
} Stack;
```
2. 初始化栈和大小。
```c
Stack s = { {0}, -1 };
```
3. 编写函数用于入栈操作(如果空间足够)。
```c
void push(Stack *s, int value) {
if (s->top < MAX_SIZE - 1) {
s->stack[++s->top] = value;
printf("Pushed %d onto the stack.\n", value);
} else {
printf("Stack is full, cannot push %d.\n", value);
}
}
```
4. 编写函数用于出栈操作(检查栈是否为空)。
```c
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack is empty.\n");
return -1; // 返回特殊值表示栈空
} else {
int value = s->stack[s->top--];
printf("Popped %d from the stack.\n", value);
return value;
}
}
```
5. 主循环,从键盘读取整数并处理。
```c
while (true) {
int input;
scanf("%d", &input);
if (input == -1)
pop(&s); // 当输入-1时,弹出栈顶元素并打印
else
push(&s, input); // 其他整数入栈
}
```
在这个程序中,你需要处理异常情况如用户提前结束输入或尝试出栈时栈已空。记得在实际应用中添加适当的错误处理和输入验证。
阅读全文