数组模拟数据结构 —— 栈

题目展示区

        题目描述:

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

                        1. push x —— 向栈顶插入一个数 x

                        2. pop —— 从栈顶弹出一个数

                        3.empty —— 判断栈是否为空

                        4.query —— 查询栈顶元素

        输入格式:

                第一行包含整数 M, 表示操作次数, 接下来的 M 行, 每行包含一个操作命令, 操作命

        令为 "push x", "pop", "empty", "query" 中的一种

        输出格式:

                对于每个 "empty" 和 "query" 操作都要输出一个查询结果,每个结果占一行

                其中, "empty" 操作的查询结果为 "YES" 或 "NO",  "query" 操作的查询结果为一个整数

        表示栈顶元素的值

        数据范围:

                1 ≤ M ≤ 100000, 1 ≤ x ≤ 10^{9} (所有操作都合法)

        输入样例:
9
push 5
query
push 6
pop
pop
empty
push 4
query
empty
        输出样例:
5
YES
4
NO

概念介绍区

        栈:

                就像是一根管子,并且这根管子只有一端开口,所以物品只能从一端进,也只能从一端

        出, 这样 栈 就有了 “后进先出, 先进后出”的特点, 画了个图

        

题目分析区

        解题大纲:

                我们可以通过开一个一维数组 stk 来模拟 “栈” 这个数据结构,并且设置一个 指针 top,

        指示现在的栈顶元素是谁,初始时, 栈 中没有任何元素,我们可以令 top 的值为 0

        解题概要:
                往栈顶插入一个数:

                        首先先让 top 自增,然后再将对应的 x 插到 栈顶

                从栈顶弹出一个数:

                        直接让 top 指针减一就好了,因为是模拟的数据结构,此处释放空间是不必要的

                判断栈是否为空:

                        初始时,栈中没有任何元素,top 的值为 0, 我们可以通过判断 top 的值是否为 0

                来判断 栈 是否为 空

                查询栈顶元素:

                        top 指针指向的就是 栈顶 ,所以如果查询栈顶元素,直接输出 stk[top] 就行了

 样例模拟区

        画图展示:

                       

代码展示区

#include <iostream>

using namespace std;

const int N = 100010;

int n;
int stk[N];
int top;
string s;

int main(){
    cin >> n;
    
    for (int i = 1; i <= n; i ++){
        cin >> s;
        if (s == "push"){
            int x;
            cin >> x;
            stk[ ++ top] = x;
        }else if (s == "pop"){
            top --;
        }else if (s == "query"){
            cout << stk[top] << endl;
        }else {
            if (top == 0) cout << "YES" << endl;
            else cout << "NO" << endl;
        }
    }
    
    return 0;
}

        其他学习网站推荐

                www.acwing.com     www.bilibili.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值