3.3栈和队列的应用

3.3.1括号匹配问题

3.3栈和队列的应用_第1张图片

 IDE可视化的编程环境

3.3栈和队列的应用_第2张图片

 作为一名程序开发人员,不管你使用哪门语言开发都有很多可以选择的集成开发环境IDE(Integrated Development Environment),IDE是提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。开发者可以通过IDE提供的代码高亮,代码补全和提示.

算法演示:

3.3栈和队列的应用_第3张图片

 3.3栈和队列的应用_第4张图片

 此时栈空

3.3栈和队列的应用_第5张图片

 3.3栈和队列的应用_第6张图片

 3.3栈和队列的应用_第7张图片

 算法流程图:

3.3栈和队列的应用_第8张图片

算法实现

3.3栈和队列的应用_第9张图片

字符型的数组里面存储了小括号,中括号和大括号(char str[])

用topElem存储弹出的栈顶元素。

3.3栈和队列的应用_第10张图片

用一个静态数组存储栈中的元素。

 3.3栈和队列的应用_第11张图片

 3.3栈和队列的应用_第12张图片

3.3.2栈在表达式求值的应用(上)

3.3栈和队列的应用_第13张图片

 比较喜欢考察中缀表达式

3.3栈和队列的应用_第14张图片

 3.3栈和队列的应用_第15张图片

中缀,后缀,前缀表达式

3.3栈和队列的应用_第16张图片

 注意操作数的前后顺序在后缀表达式不能改变

3.3栈和队列的应用_第17张图片

 或者(看成一个整体)

3.3栈和队列的应用_第18张图片

接下来哦我们再来看前缀表达式:

3.3栈和队列的应用_第19张图片

 3.3栈和队列的应用_第20张图片

混合运算转换:

中缀

3.3栈和队列的应用_第21张图片

后缀

 3.3栈和队列的应用_第22张图片

 前缀

3.3栈和队列的应用_第23张图片

 3.3栈和队列的应用_第24张图片

 3.3栈和队列的应用_第25张图片

 3.3栈和队列的应用_第26张图片

 运算符和操作数  中缀表达式和后缀表达式的生效顺序是相同的。

再来连一个例子:

3.3栈和队列的应用_第27张图片

 但是由于运算顺序不唯一,因此后缀表达式也不唯一。

3.3栈和队列的应用_第28张图片

 客观来看两种都是正确的,但是前者是“计算”结果。

要采取“左优先”原则,3.3栈和队列的应用_第29张图片

左边的减号先于右边的除号先实现。

 

 3.3栈和队列的应用_第30张图片

 那么如何进行手算

3.3栈和队列的应用_第31张图片

后缀表达式的计算(计算)

 3.3栈和队列的应用_第32张图片

 3.3栈和队列的应用_第33张图片

 3.3栈和队列的应用_第34张图片

 若表达式合法,则最后栈中只会留下一个元素,就是最终结果。

中缀表达式转前缀表达式(手酸)EASY

3.3栈和队列的应用_第35张图片

 如果是右优先

3.3栈和队列的应用_第36张图片

 

3.3.3 站在表达式求值中的应用(下)

3.3栈和队列的应用_第37张图片

 算法的整体方法:
3.3栈和队列的应用_第38张图片

 3.3栈和队列的应用_第39张图片

 减号和加号优先级相同。弹出加号,减号入栈(根据后缀表达式反波兰左优先原则)

3.3栈和队列的应用_第40张图片

3.3栈和队列的应用_第41张图片

 3.3栈和队列的应用_第42张图片

 

 把乘号也压入栈中,不确定是否后面又括号。

3.3栈和队列的应用_第43张图片

 3.3栈和队列的应用_第44张图片

 看成整体,把左边减号弹出。

再来一个例子,再有括号的情况下:
3.3栈和队列的应用_第45张图片

 3.3栈和队列的应用_第46张图片

 

 3.3栈和队列的应用_第47张图片

 

 3.3栈和队列的应用_第48张图片

 

 3.3栈和队列的应用_第49张图片

 3.3栈和队列的应用_第50张图片

 完成了栈的后缀表达式的计算。

后缀转中缀(用栈实现)————栈用来存放操作数

(1)

3.3栈和队列的应用_第51张图片

 3.3栈和队列的应用_第52张图片

 3.3栈和队列的应用_第53张图片

 3.3栈和队列的应用_第54张图片

 3.3栈和队列的应用_第55张图片

 3.3栈和队列的应用_第56张图片

 3.3栈和队列的应用_第57张图片

 3.3栈和队列的应用_第58张图片

 3.3栈和队列的应用_第59张图片

(2)有运算符栈也有操作数栈

3.3栈和队列的应用_第60张图片

 3.3栈和队列的应用_第61张图片

 3.3栈和队列的应用_第62张图片

 

 3.3栈和队列的应用_第63张图片

 3.3栈和队列的应用_第64张图片

 3.3栈和队列的应用_第65张图片

 3.3栈和队列的应用_第66张图片

 先弹出来的的是右操作数

3.3栈和队列的应用_第67张图片

 3.3栈和队列的应用_第68张图片

 3.3栈和队列的应用_第69张图片

 压辉栈顶

3.3栈和队列的应用_第70张图片

 3.3栈和队列的应用_第71张图片

 3.3栈和队列的应用_第72张图片

3.3.4栈在递归中的应用

函数调用背后的过程

3.3栈和队列的应用_第73张图片

 函数调用的特点:最后被调用的函数最先执行结束(LIFO)

3.3栈和队列的应用_第74张图片

3.3栈和队列的应用_第75张图片

func1改变的参数的值a,b并没有改变主函数中a,b的值。

 3.3栈和队列的应用_第76张图片

 存放函数,实参,函数变量。

适合用“递归”算法解决:可以把原始问题转换为属性相同,但规模较小的问题:
3.3栈和队列的应用_第77张图片

 3.3栈和队列的应用_第78张图片

 递归调用时,函数调用栈可称之为“递归工作栈”

3.3栈和队列的应用_第79张图片

3.3栈和队列的应用_第80张图片

 3.3栈和队列的应用_第81张图片

 每进入一层递归,就将递归调用所需信息压入栈顶,每退出一层信息,就从栈顶弹出响应信息。

缺点:太多递归可能会导致栈溢出。

也就是空间复杂度太高。

3.3栈和队列的应用_第82张图片

 

 3.3栈和队列的应用_第83张图片

 

3.3.5队列的应用

3.3栈和队列的应用_第84张图片

 分层遍历

一边进,一边出

123-->23-->2345-->345-->34567-->4567-->567-->56789-->6789-->789-->7891011

把左右孩子放在队尾

队列应用———图的广度优先遍历

3.3栈和队列的应用_第85张图片

123-->23--> 234-->34-->3456-->456-->56-->5678(实现了图的广度优先遍历)

队列在操作系统中的应用

对各进程争抢使用有限的系统资源,FCFS(FIRST COME FIRST SERVICE)

3.3栈和队列的应用_第86张图片

 

 3.3栈和队列的应用_第87张图片

多个电脑使用一个打印机

3.3栈和队列的应用_第88张图片 

 可缓解主机与打印机速度不匹配的问题(使用队列把数据组织起来)

你可能感兴趣的:(数据结构,ide)