解题思路

这道题目主要考察栈的基本操作:入栈(push)、出栈(pop)和查看栈顶(top)。需要注意的是空栈的处理。 主要实现要点:

  1. 使用栈数据结构存储数据
  2. 对于 操作,直接将数字压入栈中
  3. 对于 操作,需要先判断栈是否为空
    • 如果栈为空,输出"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])

算法及复杂度分析

  • 算法:栈的基本操作
  • 时间复杂度:,其中 是操作次数。每个操作的时间复杂度都是
  • 空间复杂度:,最坏情况下所有操作都是 ,栈会存储 个元素。