码迷,mamicode.com
首页 > 其他好文 > 详细

2017/04/05学习笔记

时间:2017-04-05 23:05:00      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:==   事物   扫描   如何   科学   入栈   字符串   return   表达式   

栈的应用

案例1:就近匹配
几乎所有的编译器都具有检测括号是否匹配的能力
如何实现编译器中的符号成对检测?
#include <stdio.h> int main(){int a[4][4];int (*p)[4];p =a[0];return ;
算法思路
从第一个字符开始扫描
当遇见普通字符时忽略
当遇见左符号时压入栈中
当遇见右符号时从栈中弹出栈顶符号,并进行匹配
匹配成功:继续读入下一个字符
匹配失败:立即停止,并报错
结束:
成功:所以字符扫描完毕,且栈为空
失败:匹配失败或所有字符扫描完毕但栈非空
当需要继承成对出现但右不相互相邻的事物时
可以使用栈的 先进后出的特性
栈非常适合需要接近匹配的场合

案例2:中缀 后缀
计算机的本质工作就是做数学运算,那计算机可以读入字符串
“9+(3-1)5+8/2"并计算么?
后缀表达式 ==?符号计算机运算
波兰科学家在20世纪50年底提出了一种将运算符放在数字后面的后缀表达式对应的。
我们习惯的数学表达式叫做中缀表达式 ==>符合人类的思维习惯
实例:
5+4 ==> 5 4 +
1+2
3 ==>1 2 3 * +
8+(3-1)5 =>8 3 1 -5 +
中缀表达式符号人类的阅读和思维习惯
后缀表达式符号计算机的运算习惯
如何将中缀表达式转换成后缀表达式?
中缀转后缀算法
遍历中缀表达式中的数值和符号
对于数字直接输出
对于符号: 左括号压栈
运算符号:与栈顶符号进行优先级比较
若栈顶符号优先级低:此符号压栈(默认栈顶是左括号,左括号优先级最低)
若栈顶符号优先级不低:将栈顶符号弹出并输出,之后压栈
右括号:将栈顶符号弹出并输出,直到匹配左括号
遍历结束:将栈中的所有符号弹出并输出
中缀转后缀

2017/04/05学习笔记

标签:==   事物   扫描   如何   科学   入栈   字符串   return   表达式   

原文地址:http://www.cnblogs.com/dafume/p/6671123.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!