You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

##AcWing 828. 模拟栈

一、题目描述

实现一个栈,栈初始为空,支持四种操作:

push x 向栈顶插入一个数 x pop 从栈顶弹出一个数; empty 判断栈是否为空; query 查询栈顶元素。 现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。

输入格式 第一行包含整数 M,表示操作次数。

接下来 M 行,每行包含一个操作命令,操作命令为 push xpopemptyquery 中的一种。

输出格式 对于每个 emptyquery 操作都要输出一个查询结果,每个结果占一行。

其中,empty 操作的查询结果为 YESNOquery 操作的查询结果为一个整数,表示栈顶元素的值。

数据范围 1≤M≤100000,1≤x≤10^9 所有操作保证合法。

输入样例:

10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty

输出样例:

5
5
YES
4
NO

二、理解与感悟

1、tt确定初始值是0,但增加时++tt, 就是实际上数组是从1开始的。

2、弹出就tt--,指针变了,但多余的数据不用清除,不碍事。

3、tt回到0,就是一个都没有了。

4、用数组模拟栈STLstack方便、速度快,可以遍历到栈中每一个元素。

三、实现代码

#include <bits/stdc++.h>

using namespace std;
const int N = 100010;
int stk[N], tt;
string cmd;

int main() {
    int n;
    cin >> n;
    while (n--) {
        cin >> cmd;
        if (cmd == "push") {
            int x;
            cin >> x;
            stk[++tt] = x;
        } else if (cmd == "pop")
            tt--;
        else if (cmd == "query")
            printf("%d\n", stk[tt]);
        else if (cmd == "empty") {
            if (tt == 0) printf("YES\n");
            else printf("NO\n");
        }
    }
    return 0;
}