当前位置: 首页 > news >正文

03-3.1.1 栈的基本概念

  • 👋 Hi, I’m @Beast Cheng
  • 👀 I’m interested in photography, hiking, landscape…
  • 🌱 I’m currently learning python, javascript, kotlin…
  • 📫 How to reach me --> 458290771@qq.com

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
此外,《程序员必备技能》专栏和《程序员必备工具》专栏(该专栏暂未开设)日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

定义

线性表是具有相同数据类型的n(n >= 0)个数据元素的有限序列,其中n为表长,当n=0时,线性表是一个空表。若用L命名线性表,则其一般表示为:
L = ( a 1 , a 2 , . . . , a i , a i + 1 , . . . , a n ) L=(a_1, a_2, ..., a_i, a_{i+1}, ..., a_n) L=(a1,a2,...,ai,ai+1,...,an)
栈(Stack)只允许在一端进行插入或删除操作线性表
也就是说我们如果要执行插入操作的时候,只能在表尾进行插入,不能在表的中间进行插入,这是栈这种数据结构所不允许的


重要术语:栈顶、栈底、空栈

  • 栈顶:允许插入和删除的一端
  • 栈底:不允许插入和删除的一端

示例

  • 进栈顺序: a 1 − > a 2 − > a 3 − > a 4 − > a 5 a_1->a_2->a_3->a_4->a_5 a1>a2>a3>a4>a5
  • 出栈顺序: a 5 − > a 4 − > a 3 − > a 2 − > a 1 a_5->a_4->a_3->a_2->a_1 a5>a4>a3>a2>a1

特点:后进先出 Last In First Out(LIFO)
栈其实就是一种特殊的线性表:

  • 逻辑结构:与普通的线性表相同
  • 数据的运算:插入、删除操作有区别

基本操作

再看栈的基本操作之前,先回顾线性表的基本操作[[线性表——知识总览#^0a30c4]]
栈的基本操作

  • InitStack(&S)初始化栈——构造一个空栈S,分配内存空间
  • DestroyStack(&L)销毁栈——销毁并释放栈S所占用的内存空间
  • Push(&S, x)进栈——若栈S未满,则将x加入使之成为新栈项
  • Pop(&S, &x)出栈——若栈S非空,则弹出栈项元素,并用x返回
  • GetTop(S, &x)读栈顶元素——若栈S非空,则用x返回栈顶元素
  • 其他常用操作:
    • StackEmpty(S):判断一个栈S是否为空。若S为空,则返回true,否则返回false

栈的常考题型

进栈顺序:a->b->c->d->e
有哪些合法的出栈顺序?


n个不同元素进栈,出栈元素不同排列的个数为 1 n + 1 C 2 n n \frac{1}{n+1}C^{n}_{2n} n+11C2nn
上述公式称为卡特兰数(Catalan),可采用数学归纳法证明(不要求掌握)
如: 1 5 + 1 C 10 5 = 10 ∗ 9 ∗ 8 ∗ 7 ∗ 6 6 ∗ 5 ∗ 4 ∗ 3 ∗ 2 ∗ 1 = 42 \frac{1}{5+1}C^{5}_{10} = \frac{10 * 9 * 8 * 7 *6}{6 * 5 * 4 * 3 * 2 * 1} = 42 5+11C105=654321109876=42

http://www.lryc.cn/news/364439.html

相关文章:

  • 排序算法集合
  • pdf文件太大如何变小,苹果电脑压缩pdf文件大小工具软件
  • vite项目打包,内存溢出
  • Matlab解决施密特正交规范化矩阵(代码开源)
  • 自养号测评助力:如何打造沃尔玛爆款?
  • C语言编译与链接
  • 电子电器架构 --- 智能座舱技术分类
  • 提供操作日志、审计日志解决方案思路
  • 选择富唯智能的可重构装配系统,就是选择了一个可靠的合作伙伴
  • echarts tooltip太多显示问题解决方案
  • 【control_manager】无法加载,gazebo_ros2_control 0.4.8,机械臂乱飞
  • 深入对比:Transformer与LSTM的详细解析
  • lsof 命令
  • F5G城市光网,助力“一网通城”筑基数字中国
  • Ownips+Coze海外社媒数据分析实战指南
  • C#操作MySQL从入门到精通(10)——对查询数据进行通配符过滤
  • 厘米级精确定位,开启定位技术新时代
  • docker 存储 网络 命令
  • 【MATLAB源码-第222期】基于matlab的改进蚁群算法三维栅格地图路径规划,加入精英蚁群策略。包括起点终点,障碍物,着火点,楼梯。
  • 百度ERNIE系列预训练语言模型浅析(4)-总结篇
  • Ubuntu 20.04 LTS配置JDK、Git
  • 外汇天眼:Marqeta加速欧洲业务发展,华沙办公室正式开幕
  • 使用【AliceCarousel】实现轮播功能
  • 全屋智能的本质是低成本的重构
  • 开发一个comfyui的自定义节点-支持输入中文prompt
  • 代码随想录第二十九天打卡| 491.递增子序列,46.全排列,47.全排列 II
  • 音频数据上的会话情感分析
  • 算法金 | 一文读懂K均值(K-Means)聚类算法
  • 江协科技STM32学习-1 购买24Mhz采样逻辑分析仪
  • 支付系统-业务账单