题目

模拟栈:数组实现 push/pop

思路

本题用数组实现栈的 push/pop,并处理栈满、栈空。

top 表示栈顶下标,空栈 top==-1。入栈前判满再 stack[++top]=x;出栈前判空再取 stack[top--]

解题分析

栈顶 top,push 先 ++top 再写;pop 先读再 --top。判空 top<0,判满 top+1>=cap

完整程序

#include <stdio.h>

int main(void)
{
    int st[32], top = -1;
    for (;;) {
        int op;
        if (scanf("%d", &op) != 1) {
            break;
        }
        if (op == -1) {
            break;
        }
        if (op == 1) {
            int x;
            scanf("%d", &x);
            if (top + 1 < 32) {
                st[++top] = x;
            }
        } else if (op == 0) {
            if (top < 0) {
                printf("empty\n");
            } else {
                printf("%d\n", st[top--]);
            }
        }
    }
    return 0;
}

运行示例

输入:

1 5
1 3
0
-1

输出:

3