用java实现,给定一个初始为空的栈和一系列压栈、弹栈操作,请编写程序输出每次弹栈的元素。栈的元素值均为整数。输入格式: 输入第1行为1个正整数n,表示操作个数;接下来n行,每行表示一个操作,格式为1 d或0。1 d表示将整数d压栈,0表示弹栈。n不超过20000。输出格式: 按顺序输出每次弹栈的元素,每个元素一行。若某弹栈操作不合法(如在栈空时弹栈),则对该操作输出无效。
时间: 2023-11-04 20:31:23 浏览: 68
以下是Java实现代码:
```java
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Stack<Integer> stack = new Stack<>(); // 初始化一个栈
for (int i = 0; i < n; i++) {
int op = sc.nextInt();
if (op == 1) {
int d = sc.nextInt();
stack.push(d); // 压栈
} else {
if (!stack.isEmpty()) {
int x = stack.pop(); // 弹栈
System.out.println(x);
}
}
}
}
}
```
解释一下代码逻辑:
首先,我们通过Scanner类读入n,表示操作个数。接着,我们初始化一个栈stack,用于存储整数。
接下来,我们循环n次,每次读入一个操作op。如果op为1,则读入一个整数d,并将d压入栈stack中;如果op为0,则弹出栈顶元素,并将其输出。
需要注意的是,如果栈为空时进行弹栈操作,则会抛出EmptyStackException异常。因此,在弹栈操作前需要先判断栈是否为空。
阅读全文