数据结构 栈学习笔记

栈是一种特殊的线性表,仅允许在固定一端进行插入和删除操作。它包括顺序存储和链式存储两种方式,以及顺序栈和共享栈等类型。栈常用于括号匹配、表达式求值(如中缀转后缀)和递归问题,例如斐波那契数列的计算。在判断出栈序列合法性时,需关注第一个出栈元素对后续顺序的影响。
摘要由CSDN通过智能技术生成

栈的概念

栈的定义: 只允许在一端,做插入或删除操作的一种线性表

栈顶:就是栈中允许进行插入删除的一端

栈底:固定位置,不允许操作。

数据结构分析

逻辑结构:线性表        存储结构:顺序存储、链式存储        运算:正常入栈出栈

类型:顺序栈  共享栈(两个栈底在两端,两边栈顶向中间延伸)  链式栈

链式栈一般栈顶在链表的头结点,最终指向栈底结点。

其中共享栈是用了更有效地利用存储空间。其存取效率没有影响 即O(1)

考点

1.出入栈的过程

模拟计算机出入栈就好了

2.判断出栈序列的合法性

判断合法性的一个关键手段就是 分析第一个出栈的元素,它决定了在它(比它早入栈)下面元素 的出栈相对顺序

3.栈的常见应用

(1)括号匹配

(2)表达式求值

  • 求解一个 中缀表达式 需要两个栈,一个运算符号栈,一个运算值栈
  • 求解 中缀表达式 转换为 后缀表达式,需要一个栈

      算法详解

  栈存放待确定的运算符

1遇到数字直接加入后缀表达式

2遇到运算符A,则需要与栈顶符号比较运算优先级,A若大于栈顶运算符优先级,则A入栈。否则从栈顶开始依次弹出优先级大于等于当前运算符A的元素,直到一个比它优先级低或左括号。

3遇到'('直接入栈

4遇到')' 依次把栈中元素弹出加入后缀表达式。

        手写做法:

        给所有运算如 a*b 加括号,并把运算移到括号前面(即为前缀表达式),移到括号后面(即为后缀表达式)

  • 求解一个 后缀表达式,需要一个栈

        这个简单,弹出两个数字和一个运算符号计算就完了。

(3)递归的应用

        斐波那契递归

        (但是斐波那契也可以用循环实现)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值