给定一个初始为空的栈和一系列压栈、弹栈操作,请编写程序输出每次弹栈的元素。栈的元素值均为整数。 输入格式: 输入第1行为1个正整数n,表示操作个数;接下来n行,每行表示一个操作,格式为1 d或0。1 d表示将整数d压栈,0表示弹栈。n不超过20000。 输出格式: 按顺序输出每次弹栈的元素,每个元素一行。若某弹栈操作不合法(如在栈空时弹栈),则对该操作输出invalid。 输入样例: 7 1 1 1 2 0 0 0 1 3 0 输出样例: 2 1 invalid 3 代码长度限制 16 KB 时间限制 50 ms 内存限制 10 MB。用c语言完成编程
时间: 2024-03-05 08:53:00 浏览: 13
以下是C语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 20000
int stack[MAX_N];
int top = 0;
int main() {
int n;
scanf("%d", &n);
while (n--) {
int op;
scanf("%d", &op);
if (op == 1) {
int num;
scanf("%d", &num);
stack[top++] = num;
} else if (op == 0) {
if (top == 0) {
printf("invalid\n");
} else {
printf("%d\n", stack[--top]);
}
}
}
return 0;
}
```
思路解析:
根据题目要求,需要实现一个简单的栈数据结构。栈的基本操作包括压栈和弹出栈顶元素。因此,我们可以利用数组来实现一个栈。代码中,我们定义了一个数组 `stack` 作为栈,`top` 表示栈顶指针。
读入操作数 `n` 后,我们按顺序处理每个操作。对于每个压栈操作,我们读入一个整数 `num`,将其压入栈中即可。对于每个弹栈操作,我们需要判断栈是否为空。如果栈为空,则输出 `invalid`;否则,将栈顶元素弹出并输出。最后返回 0。