【C++】 Day15数组模拟栈的过程 AcWing 828. 模拟栈 (算法基础课笔记)


前言
你好啊,我最近在学acwing的算法基础课,备战蓝桥杯,如果你也是一样的话,欢迎一起学习~


在这里插入图片描述

一、题目&解读

1、题目

题目链接{点击跳转}
在这里插入图片描述

2、题目解读 &知识点

本题考察栈的知识:后进者先出,先进者后出,这就是典型的“栈”结构。
压栈:给栈中底部存放数据
出栈:从栈顶部删除
在这里插入图片描述

二、思路

1、定义

定义stk[N]top 为栈顶 因为栈是一种先进后出的结构。

2、实现初始化

top=-1对栈进行初始化,表示空

3、实现压栈和出栈

压栈 需要++top 然后读入即可 stk[++top]=x
出栈 只需 --top

4、判断栈是否为空

只要top>0栈就不为空
栈顶stk[top]

5、算法模板

// tt表示栈顶
int stk[N], tt = 0;

// 向栈顶插入一个数
stk[ ++ tt] = x;

// 从栈顶弹出一个数
tt -- ;

// 栈顶的值
stk[tt];

// 判断栈是否为空
if (tt > 0)
{
    
    

}

三、AC代码

#include <iostream>

using namespace std;

const int N = 100010;

int m;
int stk[N],top;

int main () {
    
    
    cin >> m;
    while (m --) {
    
    
        string op;
        int x;
        cin >> op;
        if (op =="push") {
    
    
            cin >> x;
            stk[++top] = x;
        }
        else if (op == "pop") {
    
    
            --top;
        }
        else if (op == "empty") {
    
    
            cout << (top ? "NO" : "YES") << endl;
            //如果top>0 则输出no 否则输出yes
        }
        else {
    
    
            cout << stk[top] << endl;
        }
    }
    return 0;
}

四、总结

学数据结构 最主要的还是要画图,先画一遍,代码自然就能够写了。

结尾:

感谢你能看完,希望对你有帮助 ,如有错误欢迎指正,码字不易,给个赞呗 在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_49486457/article/details/122868956