1.题目
实现一个栈,栈初始为空,支持四种操作:
push x
– 向栈顶插入一个数 x x x;pop
– 从栈顶弹出一个数;empty
– 判断栈是否为空;query
– 查询栈顶元素。
现在要对栈进行 M M M 个操作,其中的每个操作 3 3 3 和操作 4 4 4都要输出相应的结果。
输入格式
第一行包含整数
M
M
M,表示操作次数。
接下来
M
M
M 行,每行包含一个操作命令,操作命令为 push x
,pop
,empty
,query
中的一种。
输出格式
对于每个 empty
和 query
操作都要输出一个查询结果,每个结果占一行。
其中,empty
操作的查询结果为 YES
或 NO
,query
操作的查询结果为一个整数,表示栈顶元素的值。
数据范围
1
≤
M
≤
100000
,
1≤M≤100000,
1≤M≤100000,
1 ≤ x ≤ 1 0 9 1≤x≤10^9 1≤x≤109
所有操作保证合法。 所有操作保证合法。 所有操作保证合法。
输入样例:
10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty
输出样例:
5
5
YES
4
NO
2.基本思想
数组模拟栈:
-
用top表示栈顶所在的索引。初始时,top = -1。表示没有元素。
-
push x :栈顶所在索引往后移动一格,然后放入x。st[++top] = x。
-
pop : top 往前移动一格。top–。
-
empty :top 大于等于 0 栈非空,小于 0 栈空。top == -1 ? “YES” : “NO”
-
query : 返回栈顶元素。st[top]
3.代码实现
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int N = 100010;
static int st[] = new int[N];
static int top = -1, idx = 0;
;//头指针
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int m = Integer.parseInt(br.readLine());
while (m-- > 0) {
String[] s = br.readLine().split(" ");
String opt = s[0];
if (opt.equals("push")) {
int x = Integer.parseInt(s[1]);
++top;
st[top] = x;
} else if (opt.equals("pop")) {
--top;
} else if (opt.equals("empty")) {
System.out.println(top == -1 ? "YES" : "NO");
} else {
System.out.println(st[top]);
}
}
}
}