题目

使用数组和栈顶指针实现一个后进先出栈(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