编程语言
首页 > 编程语言> > 数据结构篇_编程思想板块_第二章栈和队列的应用

数据结构篇_编程思想板块_第二章栈和队列的应用

作者:互联网

二、栈的应用

  1. 当栈空做退栈运算必定产生空间溢出,称“下溢”,上溢是一种错误应该避免,下溢常用作程序控制转移的条件

1)括号匹配

1. 算法思想:

① 初始设置一个空栈,顺序读入括号

② 若是左括号,入栈

③ 若是右括号,与栈顶的左括号相比较,若不匹配直接return

2)表达式求值

  1. 三式中操作数之间的相对次序相同(二叉树的三种访问次序中,叶子的相对访问次序一致),但运算符的相对次序不同

  2. 中缀表达式:我们正常模样的表达式

  3. 后缀表达式(逆波兰表达式):此处一般考从中缀转后缀不能/能转成什么样

① 运算符在操作数后面

② 一个中缀会转成多个后缀,故按”左优先计算“原则确定唯一后缀表达式

③ 表达式模样为<左操作数,右操作数,运算符>

④ 从栈中先弹出的是右操作数

  1. 前缀表达式(波兰表达式):

① 运算符在操作数前面

② 一个中缀会转成多个前缀,故按”右优先计算“原则确定唯一后缀表达式

③ 表达式模样为<运算符,左操作数,右操作数>

④ 从栈中先弹出的是左操作数

  1. 中缀表达式计算算法思想:

① 初始化两个栈,操作数栈和运算符栈

② 若扫描到操作数,压入操作数栈

③ 若扫描到运算符或界限符(括号),则按”中缀转后缀“相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,需要再弹出两个操作数栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)

  1. 用栈实现中缀表达式转后缀表达式:

① 初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。

② 从左到右处理各个元素,直到末尾。可能遇到三种情况:

(1) 遇到操作数。直接加入后缀表达式。

(2) 遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。

(3) 遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。

③ 按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。

  1. 用栈实现后缀表达式的计算:

① 从左往右扫描下一个元素,直到处理完所有元素

② 若扫描到操作数则压入栈,并回到①;否则执行③

③ 若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①

3)递归中应用

  1. 递归模型必须满足两个条件:

① 递归表达式(递归体)

② 边界条件(递归出口)


  1. (学会怎么写计算过程)

4)迷宫求解

5)进制转换

6)栈经典题目的编程思想

1. 设有两个栈s1、s2都采用顺序栈方式,并共享一个存储区[0,...,maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向、迎面增长的存储方式。试设计s1.s2有关入栈和出栈的操作算法。

算法思想:

注意:

① 插入和删除时都要判断栈是否已满或已空

7)队经典题目的编程思想

1. 请设计一个队列,要求满足:

①初始时队列为空;

②入队时,允许增加队列占用空间;

③出队后,出队元素所占用的空间可重复使用,即整个队列所占用的空间只增不减;④入队操作和出队操作的时间复杂度始终保持为O(1)。请回答下列问题:

1) 该队列是应选择链式存储结构,还是应选择顺序存储结构

2) 画出队列的初始状态,并给出判断队空和队满的条件

3) 画出第一个元素入队后的队列状态

4) 给出入队操作和出队操作的基本过程

算法思想:

8)栈和队列应用经典题目的编程思想

1.括号匹配题中并没有大括号可以包括中/小括号这一思想

2. 按下图所示铁道进行车厢调度(注意,两侧铁道均为单向行驶道,火车调度站有一个用

于调度的“栈道”),火车调度站的入口处有n节硬座和软座车厢(分别用H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,以使所有的软座车厢都被调整到硬座车厢之前

算法思想:

两侧的铁道均为单向行驶道,且两侧不相通。所有车辆都必须通过“栈道”进行调度。算法的基本设计思想:所有车厢依次前进并逐一检查,若为硬座车厢则入栈,等待最后调度。检查完后,所有的硬座车厢已全部入栈道,车道中的车厢均为软座车厢,此时将栈道的车厢调度出来,调整到软座车厢之后。

3.

算法思想:

先将n=0和n=1的情况入栈,把n=0和n=2取除算出n3后再把n3和n2入栈,再重复上述操作用n3,n2算出n4,依次计算最后算出的值即为最终值

4. 某汽车轮渡口,过江渡船每次能载10辆车过江。过江车辆分为客车类和货车类,上渡船有如下规定:同类车先到先上船;客车先于货车上船,且每上4辆客车,才允许放上1辆货车;若等待客车不足4辆,则以货车代替;若无货车等待,允许客车都上船。试设计一个算法模拟渡口管理

算法思想:

假设数组q的最大下标为10(类似于哈希表的思想),恰好是每次载渡的最大量.假设客车的队列为q1,货车的队列为q2.若q1充足,则每取4个q1元素后再取一个q2元素,直到q的长度为10.若q1不充足,则直接用q2补齐

三、队列应用

  1. 树的层次遍历

  2. 图的广度遍历

  3. CPU资源竞争

  4. 打印机与主机速度不匹配

  5. 页面替换算法

标签:操作数,队列,编程,车厢,运算符,后缀,算法,数据结构,表达式
来源: https://www.cnblogs.com/oten/p/16293400.html