数据结构与算法 / 栈(stack)

void example()
{
}

        (1)不需要改变调用该函数的寄存器的值。

        (2)没有局部变量

        (3)没有调用其他函数,故没有参数构造区和返回地址。 

使用栈的原因是整个过程完美的符合栈的后进先出的过程。

栗子:函数 A 调用 B,B 调用 C。如果想都执行完毕,返回 A 继续执行,那么需要释放 C 的栈帧空间、之后再释放 B 的栈帧空间、最后才能让 A 继续执行。整个过程和栈的特性是一样的。当然了,用链表也是可以的,但是链表就会暴露太多的接口,给代码查看人员很多疑惑,恰到好处最好!

2、栈在表达式求值中的应用

表达式中从左到右,数字压入栈,运算符再压入栈。每次压入运算符时,比较当前运算符和栈顶运算符哪个优先级高,若当前优先级高,则运算符继续压入,若栈顶运算符优先级高,则说明栈顶的运算符可以进行计算了。计算方法是从数字栈中取出两个数,和运算符栈的栈顶元素进行计算。以此类推,计算出整个表达式的值。

3、栈在括号匹配中的应用

"(" 和 ")"匹配,"[" 和 "]"匹配,"{" 和 "}"匹配,但是三者两两混淆就有问题了。

检查的方法是每次从左到右依次将字符串中左(小、中、大)括号压入栈中,当首次扫描到右(小、中、大)括号时,将该括号和栈顶元素进行比较,若匹配则 pop 该栈顶元素,继续扫描,若不匹配,则可以报括号不匹配的错误。

五、实现(C++)

github​

 

(SAW:Game Over!)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部