王道考研数据结构栈和队列的综合应用

栈的应用

栈的原理

栈是输出受限的抽象数据类型,先进后出。

栈的应用场景

递归

普通的递归函数都是直接调用系统栈。甚至函数的局部变量都是采用栈进行存储。

深度搜索

深度搜索是一种搜索方式,他是从搜索开始节点纵向搜索,直到找到搜索终点或者直接退出搜索。其基本思想也是借用栈完成的,将每次搜索的节点压入栈,通过栈顶弹出实现回溯。

表达式求值

表达式求值有三种表达方法,分别是前缀式、中缀式、后缀式。分别对应二叉树的前序、中序、后序三种遍历方式。

前序遍历        优先遍历根节点,其次是左节点,最后是右节点

中序遍历        优先遍历左节点,其次是根节点,最后是右节点

后序遍历        优先遍历左节点,其次是右节点,最后是根节点

这里说的和这里需要用到的没有任何关系。但是先提一下,以后会用到的。

因为表达式求值有算符优先级的关系在,故而不能使用线性结构直接运算出来,部分表达式需要借助栈暂时存储运算符。

举个例子:【2012统考真题】

已知操作符包括+,-,*,/,(,)。将中缀表达式a+b-a*((c+d)/e-f)+g转换位等价的后缀表达式ab+acd+e/f-*-g+时,用栈来存放展示还不能确定运算次序的操作符。若栈初始时为空,则转换过程中同时保存在栈中的操作符的最大个数是

解析:这道题给后缀式完全是吓唬人的,在这道题目中,完全没有用到后缀式。看中缀式即可。

暂存在栈的操作符最多的情况一定是在含有*,/符号的部分表达式中。

a+b-a*S 这部分只存 -,* 数量2

a+b-a*((c+dS 这部分存了-,*,(,(,+ 数量5

 a+b-a*(D/eS 这部分存了-,*,(,/ 数量4

因此最大数量为5

队列的应用

队列的原理

队列是一种输出受限的抽象数据类型,先进先出。

队列的应用场景

广度搜索

广度搜索是一种横向搜索方式。从搜索开始节点开始,遍历完同一层的节点后,进入下一层,直到搜索结束或者退出搜索。

操作系统的缓冲区

由于外设与计算机内部的处理速度不一致,故而,计算机内部处理完结果放入缓冲区(等待队列),等待外设完成当前任务后取队首任务执行。

课后综合习题

都是一些简单题目,没什么难度,不在写了。

稍微提下第四题。客车和货车需要使用两个队列,客车每次弹出四个,货车每次弹出一个。如果客车队列数量不足四个,有货车弹出,直到满10个为止。

你可能感兴趣的:(C++数据结构)