要熟练掌握栈和队列,必须学会栈和队列的应用,把握其中的规律,然后才能举一反三。接下来简单介绍栈和队列的简单应用。
栈在括号匹配中的运用,假设表达式中允许包括两种括号:圆括号和方括号,其嵌套的顺序随意,即。。。均为正确的格式 。。。均为不正确的格式,考虑到下列括号序列:
算法的思想如下:
1.初始化设置一个空栈,顺序读入括号。
2.若是右括号,则或者使置于栈顶的最急迫期待得以消解,或者是不合法的情况。(括号序列不匹配,退出程序)
3.若是左括号,则作为一个新的更急的期待压入栈 中,自然使原有的栈中所有的未消解的期待的急迫性降了一级。算法结束时,栈为空,否则括号序列不匹配。
栈在表达式中值的应用,表达式求值是程序设计语言编译中的一个最基本的问题,它的实现是栈应用的一个典型范例,中缀表达式不仅依赖运算符的优先级,而且还要处理括号,后缀表达式的运算符在操作数后面,在后缀表达式中已经考虑了运算符的优先级,没有括号,只有操作数和运算符,中缀表达式和后缀表达式的过程。
读者也可以将后缀表达式与原运算式对应的表达式树的后序遍历进行比较,可以发现他们又异曲同工之妙。
通过后缀表示计算表达式值的过程为:顺序扫描表达式的每一项,然后根据它的类型做出如下相应的操作,如果该项是操作数,将其压入栈中,如果该项是操作符<op>,则连续从栈中退出两个操作数Y和X,形成运算指令X<op>Y,并将计算结果重新压入栈中。当表达式的所有项都扫描并处理完后,栈顶存放的就是最后的计算结果。
栈在递归中的应用,递归是一种重要的程序设计方法,简单来说,如果在一个函数,过程或数据结构的定义中又应用了它自身,那么这个函数,过程或数据结构是递归定义的简称递归。
它通常把一个大型的复杂的问题,层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的代码就可以描述出解题过程中所需要的多次重复计算,大大减少了程序的代码量,但在通常情况下,它的效率并不是很高。
递归模型是不能循环定义的,其必须满足下面的两个条件:
1.递归表达式。 2.边界条件即为递归出口
递归的精髓在于能否将原始问题转换为属性享同的但规模较小的问题,在递归调用的过程中,系统为每一层返回的点,局部变量,传入实参等开辟了递归工作栈来及逆行数据存储,递归次数过多容易造成溢出等,而其效率不高的原因是递归调用过程中包含很多重复的计算。
显然在调用的过程中,递归会变得效率低下,但优点是代码简单,容易理解,但在第四章的树中利用了递归的思想,代码将会变得十分简单,容易理解。在树中利用了递归的思想,代码将会变得十分简单。通常情况下,初学者对于递归的调用过程很难理解,若读者想要具体了解递归是如何实现的。可以将递归算法转化为非递归算法。通常需要借助栈来实现这种转换。
队列在层次遍历中的应用,在信息处理中有一大类问题需要逐层或逐行处理。这类问题的解决方法往往是在当前层或当前行时下一层或下一行做预处理,把处理顺序安排好待当前层或者当前行处理完毕,就可以处理下一层或者下一行,使用队列是为了保存下一步的处理顺序。下面用二叉树层次遍历的例子,说明队列的应用。显示了层次遍历二叉树的过程。
该过程简单描述如下:1.根结点入队。2.若队空,则结束遍历,否则重复三操作。3。队列中第一个结点出队,并访问之。若其有左孩子,则将左孩子入队,若其有右孩子,则将右孩子入队。
队列在计算机系统中的应用,队列在计算机系统的应用非常广泛,以下仅从两个方面来简述队列在计算机系统中的作用,第一个方面是解决主机与外部设备之间速度不匹配的问题,第二个方面是解决由于多用户引起的资源竞争问题。
对于第二个方面,CPU资源的竞争就是一个典型的例子,在一个带有多终端的计算机系统上,有多个用户需要CPU各自运行自己的程序,它们分别通过各自的终端向操作系统提出占用CPU的请求,操作系统通常按照每个请求在时间上的先后顺序,把他们拍成一个队列,每次把cpu分配给队首请求的用户使用,当相应的程序运行结束或者用完规定的时间间隔后,则令其出队,再把cpu分配给新的队首请求用户使用,这样既满足了每个用户的请求,又使cpu能够正常运行。
栈和队列的应用
最新推荐文章于 2022-07-29 12:43:05 发布