
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据结构是每一位软件编程开发程序员都应该熟练掌握的一个编程知识点,而本文我们就通过案例分析来简单了解一下,数据结构栈的应用场景都有哪些。
1、函数调用栈
函数调用栈是一个非常的应用场景。
操作系统会给每个线程分配一块独立的内存空间,这块内存被组织成“栈”这种数据结构,用来存储函数调用时的临时变量。
每进入一个函数,就会将临时变量作为一个栈帧入栈,当被调用函数执行完成,返回到上层函数之后,再将这个函数对应的栈帧出栈。
直到函数栈为空,则表示外层的函数已经执行完毕。
2、逆波兰表达式
编译器还会利用栈来实现表达式求值,这部分也有非常成熟的四则运算算法——逆波兰表达式。
通常的四则运算表达式写成(1+2)x(3+4),加减乘除等运算符写在中间,因此也被称作“中缀表达式”;逆波兰表达式的写法是12+34+x,运算符被写在后面,因而也被称作“后缀表达式”;除此之外,还有波兰表达式,其写法是x+12+34,被称作“前缀表达式”。
如果将表达式画出一棵语法树,就能以树的概念来直观理解前缀、中缀、后缀的含义,前缀表达式对应树的前序遍历,中缀表达式对应树的中序遍历,后缀表达式对应树的后序遍历。
3、运算表达式语法树
如果要使用逆波兰表达式来做四则运算,需要先将中缀表达式转换成逆波兰表达式,涉及到操作数栈和运算符栈:
从左向右遍历中缀表达式;
若读取的是操作数,将操作数存入到操作数栈中;
若读取的是运算符,还需要根据运算符类型进一步判断:
如果是(运算符,则直接存入运算符栈中;
如果是)运算符,则输出运算符栈中的运算符到操作数栈,直到遇到(运算符,在这里放弃(和)运算符;
如果是非括号运算符,还需要与运算符栈栈顶的运算符比较优先级:
如果运算符栈栈顶的运算符是括号,则将当前运算符直接存入运算符栈中;
如果当前运算符比运算符栈栈顶的运算符优先级更高时,则直接存入运算符栈中;
如果当前运算符比运算符栈栈顶的运算符优先级更低或相等时,则输出栈顶运算符到操作数栈,然后将当前运算符压入操作符栈;
当表达式读取完后,将运算符栈中的运算符依次出栈到操作数栈中,直到运算符栈为空。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。