2023王道考研数据结构第三章---栈

3.1_1 栈的基本概念

1、栈的基本概念

  • 栈是只允许在一端进行插入或删除操作的线性表
  • 重要术语:栈顶、栈底、空栈
  • 逻辑结构:与普通线性表相同(线性结构)
  • 数据的运算:与普通线性表插入、删除操作有区别
  • 栈顶可插入和删除
  • 栈底不允许插入和删除
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、栈的基本操作

在这里插入图片描述

3、卡特兰数

在这里插入图片描述

4、知识回顾与重要考点

在这里插入图片描述

3.1_2栈的顺序存储实现

用顺序存储方式实现的栈
在这里插入图片描述
顺序栈的缺点:栈的大小不可变

1、顺序栈的定义

在这里插入图片描述

  • 顺序存储:给各个数据元素分配连续的存储空间,大小为MaxSize*sizeof(ElemType)
  • sq:sequence—顺序
  • top:栈顶指针,也是数组的下标,从0开始
    在这里插入图片描述

2、初始化操作

在这里插入图片描述

  • 刚开始栈顶指针指向0这个位置是不合理的,因为这时栈中并没有数据元素,故top此时指向-1
  • 故判断是否栈空只要判断top是否指向-1即可
    在这里插入图片描述

3、进栈操作

在这里插入图片描述
在这里插入图片描述
如果上下两句代码颠倒,则等价于:S.data[S.top++]=x;

  • 因为MaxSize相当于元素个数,故top(相当于下标)不能超过MaxSize-1
  • S.data[S.top] = x;把数据元素传到data数组中tpp指针所指向的地方

4、出栈操作

在这里插入图片描述
在这里插入图片描述

5、读栈顶元素操作

在这里插入图片描述
读栈顶元素操作与出栈操作的唯一区别:
在这里插入图片描述

6、另一种方式:top初始指向0(审题时要注意)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、共享栈

  • 两个栈共享同一片空间
  • 可以提高空间的利用率
  • 设置两个栈顶指针(如0号栈top0和1号栈top1)
    在这里插入图片描述
    0号栈从下往上依次递增,1号栈从上往下依次递增
  • 在这里插入图片描述
  • 栈满条件:top0 + 1 == top1

8、知识回顾与重要考点

在这里插入图片描述
(最后一行:栈满条件)

3.1_3 栈的链式存储实现

在这里插入图片描述

1、链栈的定义

  • 头插法建立单链表 -> 进栈操作
  • 对头结点的“后删”操作 -> 出栈操作
    在这里插入图片描述
    在这里插入图片描述

3.2.2_栈在表达式求值中的应用(上)在这里插入图片描述

1、波兰表达式和逆波兰表达式

(界限符也就是我们平时算式中用到的括号)
在这里插入图片描述
在这里插入图片描述

2、中缀表达式转后缀表达式(手算)

**中缀表达式中括号里出现的运算符优先,计算的先后顺序都会影响后缀表达式中运算符的先后顺序 **

在这里插入图片描述
后缀表达式不唯一:

  • 从前开始(计算机中
    在这里插入图片描述
  • 从后开始
    在这里插入图片描述

“左优先原则”

只要左边的运算符能先计算,就优先算左边的(可保证运算顺序唯一)
在这里插入图片描述
这个式子就是先加法,后面再先乘除后加减
在这里插入图片描述

3、后缀表达式的计算(机算)

A入栈,B入栈,如果扫描到运算符,那么弹出A和B,执行相应运算,运算结果压回栈顶。
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值