第四章栈和队列栈和队列是两种重要的线性结构
从数据结构角度看,栈和队也是线性表,其特殊性存于栈和队的基本操作是线性表操作的子集,它们是受限制的线性表
一、栈(stack)栈顶(top)栈底(bottom)空栈栈又称为后进先出(lastinfirstout)线性表
关于栈的操作有:1)inistack(s)初始化操作,设定一个空栈要S
2)empty(s)关栈空函数
空返回“true”
3)push(s,x)入栈操作
4)pop(s)出栈函数
5)gettop(s)取栈顶元素函数
6)clear(s)栈置空操作
7)current_size(s)求当前栈中元素个数函数
栈的一个重要应用是在程序设计语言中实现递归过程
递归算法作为计算机程序设计中的一种重要的算法,是较难理解的算法之一
简单地说,递归就是编写这样的一个特殊的过程,该过程体中有一个语句用于调用过程自身(称为递归调用)
递归过程由于实现了自我的嵌套执行,使这种过程的执行变得复杂起来,其执行的流程可以用图1所示
图1递归过程的执行流程从图1可以看出,递归过程的执行总是一个过程体未执行完,就带着本次执行的结果又进入另一轮过程体的执行,……,如此反复,不断深入,直到某次过程的执行遇到终止递归调用的条件成立时,则不再深入,而执行本次的过程体余下的部分,然后又返回到上一次调用的过程体中,执行其余下的部分,……,如此反复,直到回到起始位置上,才最终结束整个递归过程的执行,得到相应的执行结果
递归过程的程序设计的核心就是参照这种执行流程,设计出一种适合"逐步深入,而后又逐步返回"的递归调用模型,以解决实际问题
利用递归调用程序设计技术可以解决很复杂但规律性很强的问题,并且可以使程序变得十分简短
它经常出现在以下几个方面:1)有很多数学函数是递归定义的
如(1)阶乘函数1n=0fact(n)=n*fact(n-1)n>0(2)菲