题目

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

完整程序

import java.util.Scanner;

public class Main {
    // 数组栈实现
    static class MyStack {
        private final int[] data;
        private int top = -1;
        private final int capacity;

        public MyStack(int capacity) {
            this.capacity = capacity;
            this.data = new int[capacity];
        }

        public boolean push(int x) {
            if (top + 1 >= capacity) return false;
            data[++top] = x;
            return true;
        }

        public Integer pop() {
            if (top < 0) return null;
            return data[top--];
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        MyStack stack = new MyStack(32);

        while (sc.hasNextInt()) {
            int op = sc.nextInt();
            if (op == -1) {
                break;
            } else if (op == 1) {
                int val = sc.nextInt();
                stack.push(val);
            } else if (op == 0) {
                Integer val = stack.pop();
                if (val == null) {
                    System.out.println("empty");
                } else {
                    System.out.println(val);
                }
            }
        }
    }
}

运行示例

输入:

1 5
1 3
0
-1

输出:

3