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

相关推荐

  1. 03-3.1.1 基本概念

    2024-06-06 03:54:04       10 阅读
  2. Docker基本概念

    2024-06-06 03:54:04       33 阅读
  3. git 基本概念

    2024-06-06 03:54:04       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 03:54:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 03:54:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 03:54:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 03:54:04       20 阅读

热门阅读

  1. 日常工作笔记

    2024-06-06 03:54:04       10 阅读
  2. 带你认识ffmpeg

    2024-06-06 03:54:04       9 阅读
  3. python中使用缓存技术

    2024-06-06 03:54:04       10 阅读
  4. rpc理解

    2024-06-06 03:54:04       9 阅读
  5. mybatis离谱bug乱转类型

    2024-06-06 03:54:04       9 阅读
  6. AcWing 841. 字符串哈希——算法基础课题解

    2024-06-06 03:54:04       8 阅读
  7. 基于学习的决策树

    2024-06-06 03:54:04       7 阅读
  8. spark SQL优化器catalyst学习

    2024-06-06 03:54:04       7 阅读
  9. deque

    deque

    2024-06-06 03:54:04      9 阅读