目录
*一、栈在括号的应用
假如表达式包括两种括号:圆括号和方括号,其嵌套的顺序任意即([]())或[([][])]为正确格式
下列格式:
[ ( ) [ ] ]
1 2 3 4 5 6
算法分析如下:
- 初始设置一个空栈,顺序读入括号
- 若是右括号,则或者使置于栈顶的最急迫期待得以消解,或者是不合法的情况(括号序列不匹配,退出程序)
- 若是左括号,则作为一个新的更急迫的期待压入栈中,自然使原有栈中的所有未消解的期待的急迫性降低了一级
- 算法结束时,栈为空,否则括号序列不匹配
*二、栈在表达式中的应用
中缀表达式:
2.1前缀表达式
2.2后缀表达式
三、栈带递归中的应用
递归是一种程序设计方法。若在一个函数、过程或数据结构的定义中又应用到了它本身,则这个函数、过程或数据结构成为是递归定义的,简称递归
通常把大型的复杂问题转化为一个与原问题相似的规模较小的问题来求解,大大减少程序代码量,但在通常情况下,效率并不太高
以斐波拉契数为例,其定义为
int Fib(int n) //
{
if(n==0)
return 0; //边界条件
else if (n==1);
return 1; //边界条件
else
return Fib(n-1)+Fib(n-2); //递归表达式
}
四、队列在层次遍历中的应用
五、队列在计算机系统中的应用
(一)解决主机与外部设备之间不匹配的问题
主机输出数据给打印机打印,输出数据的速度比打印数据的速度要快得多,由于速度不匹配,直接把数据送给打印机显然不行
解决办法:
设置一个打印数据缓冲区,主机把要打印输出的数据依次写入这个缓冲区,写满后就暂停输出,转去做其他事情,打印机就从缓冲区中按先进先出顺序依次取出数据打印
(二)CPU资源的竞争
在一个带有多终端的计算机系统上,有多个用户需要CPU各自运行自己的程序,它们分别通过各自的终端向操作系统提出占用CPU的请求。
操作系统通常按照每个请求在时间上的先后顺序,把它们排成一个队列,每次把CPU分配给队首请求的用户使用