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