7--栈的定义及实现
2016-05-14 19:25
197 查看
一:栈的定义
栈是一种特殊的线性表
栈只允许在线性表的一端进行操作
栈通常有两种实现方式:顺序结构实现和链式结构实现
性质:后进先出(LIFO)--last in first out
![](http://img.blog.csdn.net/20160514155445287)
二:栈的应用实战--编译器符号成对检测
当需要检测成对出现但又互不相邻的事物时,使用栈的“后进先出”特性
算法思路
从第一个字符开始扫描
当遇见普通字符时忽略,当遇见左符号时压入栈中
当遇见右符号时从栈中弹出栈顶符号
进行匹配
匹配成功,继续读入下一个字符
匹配失败,立即停止,并报错
结束
成功:所有字符扫描完毕,且栈为空
失败:匹配失败或所有字符扫描完毕但栈非空
算法框架
![](http://img.blog.csdn.net/20160514175942591)
三:栈的应用实战--计算器程序的实现
中缀表达式和后缀表达式
中缀表达式符合人们的思维习惯
后缀表达式符合计算机的运算方式
5+3 ——>53+
1+2*3 ——>123*+
9+(3-1)*5+8/2——>931-5*+82/+
中缀表达式转后缀表达式
对于数字:直接输出
对于符号:
左括号:进栈
符号:与栈顶符号进行优先级比较
栈顶符号优先级低:进栈
栈顶符号优先级不低:将栈中符号全部弹出并输出,之后进栈
右括号:将栈顶符号弹出并输出,直到匹配左括号
遍历结束:将栈中所有符号弹出并输出
算法框架
![](http://img.blog.csdn.net/20160515171516858)
后缀表达式的计算
对于数字:进栈
对于符号:
从栈中弹出右操作数
从栈中弹出左操作数
根据符号进行运算
将运算结果压入栈中
遍历结束:栈中唯一数字为计算结果
算法框架
栈是一种特殊的线性表
栈只允许在线性表的一端进行操作
栈通常有两种实现方式:顺序结构实现和链式结构实现
性质:后进先出(LIFO)--last in first out
二:栈的应用实战--编译器符号成对检测
当需要检测成对出现但又互不相邻的事物时,使用栈的“后进先出”特性
算法思路
从第一个字符开始扫描
当遇见普通字符时忽略,当遇见左符号时压入栈中
当遇见右符号时从栈中弹出栈顶符号
进行匹配
匹配成功,继续读入下一个字符
匹配失败,立即停止,并报错
结束
成功:所有字符扫描完毕,且栈为空
失败:匹配失败或所有字符扫描完毕但栈非空
算法框架
三:栈的应用实战--计算器程序的实现
中缀表达式和后缀表达式
中缀表达式符合人们的思维习惯
后缀表达式符合计算机的运算方式
5+3 ——>53+
1+2*3 ——>123*+
9+(3-1)*5+8/2——>931-5*+82/+
中缀表达式转后缀表达式
对于数字:直接输出
对于符号:
左括号:进栈
符号:与栈顶符号进行优先级比较
栈顶符号优先级低:进栈
栈顶符号优先级不低:将栈中符号全部弹出并输出,之后进栈
右括号:将栈顶符号弹出并输出,直到匹配左括号
遍历结束:将栈中所有符号弹出并输出
算法框架
后缀表达式的计算
对于数字:进栈
对于符号:
从栈中弹出右操作数
从栈中弹出左操作数
根据符号进行运算
将运算结果压入栈中
遍历结束:栈中唯一数字为计算结果
算法框架
相关文章推荐
- 搞懂$.each和$(selector).each
- 堆栈堆栈
- C++primer知识点(一)
- ora11g listener.ora
- Android telnet RPi 2B
- BAT 批处理获取系统时间
- Unity mesh texture开启 read 会增加内存畅想
- iOS开发入门
- openstack mitaka 完整安装详细文档(亲测,花了3天时间)
- 《快学Scala》第四章习题解答
- 2016"百度之星" - 资格赛(Astar Round1) 1004
- hdu1058 && hdu3199
- iOS简单对象的文件存取
- QT-悬浮对话框
- 搭建高可用mongodb集群(四)—— 分片
- 优先队列priority queue
- 菜单的属性与封装
- Python:输出系统所有的PID
- 安卓 webView使用介绍:补充篇
- Java 常用排序算法/程序员必须掌握的 8大排序算法