题目
使用数组和栈顶指针实现一个后进先出栈(LIFO Stack),支持压栈(push)、弹栈(pop)、判空和判满操作。
输入格式:多行指令:1 x 表示压栈 x;0 表示出栈并输出该值(栈空输出 empty);-1 结束运行。
输出格式:响应出栈操作,分行输出出栈元素或 empty。
数据范围与约定:栈容量为 32。
思路与算法
1. 栈顶指针管理
初始化空栈时 top = -1。压栈时先检查是否栈满(top + 1 < CAPACITY),再 stack[++top] = x。
2. 出栈与空栈防护
弹栈前必须先检查 top >= 0。若栈空输出提示,非空则返回 stack[top--]。
完整程序
#include <stdio.h>
int main(void)
{
// 顺序栈:后进先出(LIFO),top 指针跟踪栈顶位置
int st[32], top = -1;
for (;;) {
int op;
if (scanf("%d", &op) != 1) {
break;
}
if (op == -1) {
break;
}
if (op == 1) {
// 压栈(Push):栈顶先自增,再存入元素
int x;
scanf("%d", &x);
if (top + 1 < 32) {
st[++top] = x;
}
} else if (op == 0) {
// 弹栈(Pop):取出当前栈顶元素,随后栈顶自减
if (top < 0) {
printf("empty\n");
} else {
printf("%d\n", st[top--]);
}
}
}
return 0;
}运行示例
输入:
1 5
1 3
0
-1输出:
3