算法模版:模拟数据结构之栈【沈七】

前言

唤我沈七就好啦。
这是模拟数据结构系列。
以下是之前同系列文章。

模拟数据结构之绪论
模拟数据结构之链表

本次讲解的是栈。

什么是栈?

相关概念
栈顶:允许元素插入与删除的一端称为栈顶。
入栈:栈的插入操作。
出栈:栈的删除操作。
特点:先进后出。
即先入栈的元素需要等后入栈的元素出栈后才能出栈。
这是因为栈只有一个出口,可以通过下图来辅助理解。
栈也是线性表的一种,所以也可以理解为只能在一端操作的数组。
在这里插入图片描述

实现思路

前面提到,栈可以理解为只能在一端操作的数组。而这正是我们实现思路。

实现方法

1 .创建变量

const int N=1e6+10;
int stk[N],top=-1;  初始化

定义一个数组,一个放在栈顶的变量
将栈顶变量初始化为 -1 是为了方便最后判断栈是否为空。

2 . 插入操作


   if(a=="push")
    {
        cin>>x;
        stk[++top]=x; 只能在栈顶插入
    }  

当输入 push 5 时 ,5这个元素就入栈了。
注意这里一定要是 ++top 让下标是0, 因为 top 初始化的是 -1。
如果 top++ 下标就是 - 1 了。

3 .删除操作

  else if(a=="pop")
        top--;  只能在栈顶弹出

当输入 pop 5 时 ,5这个元素就出栈了。
注意这里确实并没有真正删除放在栈顶的元素,但栈顶下降了一位,就可以理解为删除了上一位。
因为等下一次 stk[++top]=x;之前没被删除的元素就会被新插入的元素覆盖。
这里也不需要考虑空间浪费问题。

4 .判断栈空

     	 if(a=="empty")
        {
        if(top==-1) // 如果栈顶还为 -1 栈就为空
        puts("YES");
        else
        puts("NO");
        }
    }
    return 0;
}

当输入 empty 时 ,返回 YES 栈就为空 , 返回 NO 栈就非空。

完整模板

# include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int stk[N],top=-1;//初始化
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int x;
        string a;
        cin>>a;
        if(a=="push")
        {
            cin>>x;
            stk[++top]=x;//只能在栈顶插入
        }  
        else if(a=="pop")
        top--;//只能在栈顶弹出
        else if(a=="empty")
        {
        if(top==-1)
        puts("YES");
        else
        puts("NO");
        }
        else 
        cout<<stk[top]<<endl;//取出栈顶
    }
    return 0;
}

完结散花

ok以上就是对模拟数据结构之栈的全部讲解啦,很感谢你能看到这儿啦。如果有遗漏、错误或者有更加通俗易懂的讲解,欢迎小伙伴私信我,我后期再补充完善。

参考文章

https://www.acwing.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沈七QWQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值