|
|
栈具有广泛的应用,如:求表达式的值及递归到非递归等。
|
|
|
|
在源程序编译中,若要把一个含有表达式的赋值语句翻译成正确求值的机器语言,首先应正确地解释表达式。例如,赋值语句"X=4+8×2-3;",其正确的计算结果应该是17,但若在编译程序中简单地按自左向右扫描的原则进行计算,则为:X=12×2-3=24-3=21。这个结果显然是错误的。因此,为了使编译程序能够正确地求值,必须事先规定求值的顺序和规则。通常采用运算符优先法。
|
|
|
|
将一个递归算法转换为功能等价的非递归算法有很多种方法,可以使用栈保存中间结果。其一般形式如下:
|
|
|
|
|
|
使用转换成等价的非递归算法如下,其中st[top][0]用于存放n值,st[top][1]用于存放n!值,在初始时,设置st[top][1]为0,表示n!尚未求出。
|
|
|
|
|
|
|
|
|
|
|
|
|