解题思路
这道题目主要考察栈的基本操作:入栈(push)、出栈(pop)和查看栈顶(top)。需要注意的是空栈的处理。 主要实现要点:
- 使用栈数据结构存储数据
- 对于 操作,直接将数字压入栈中
- 对于 和 操作,需要先判断栈是否为空
- 如果栈为空,输出"error"
- 如果栈不为空,执行相应操作
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
stack<int> st;
string op;
while(n--) {
cin >> op;
if(op == "push") {
int x;
cin >> x;
st.push(x);
}
else if(op == "pop") {
if(st.empty()) {
cout << "error\n";
} else {
cout << st.top() << "\n";
st.pop();
}
}
else { // top
if(st.empty()) {
cout << "error\n";
} else {
cout << st.top() << "\n";
}
}
}
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Stack<Integer> st = new Stack<>();
for(int i = 0; i < n; i++) {
String op = sc.next();
if(op.equals("push")) {
int x = sc.nextInt();
st.push(x);
}
else if(op.equals("pop")) {
if(st.empty()) {
System.out.println("error");
} else {
System.out.println(st.peek());
st.pop();
}
}
else { // top
if(st.empty()) {
System.out.println("error");
} else {
System.out.println(st.peek());
}
}
}
}
}
n = int(input())
st = []
for _ in range(n):
op = input().split()
if op[0] == "push":
st.append(int(op[1]))
elif op[0] == "pop":
if not st:
print("error")
else:
print(st[-1])
st.pop()
else: # top
if not st:
print("error")
else:
print(st[-1])
算法及复杂度分析
- 算法:栈的基本操作
- 时间复杂度:,其中 是操作次数。每个操作的时间复杂度都是 。
- 空间复杂度:,最坏情况下所有操作都是 ,栈会存储 个元素。