一:栈的定义
栈是一种特殊的线性表
栈只允许在线性表的一端进行操作
栈通常有两种实现方式:顺序结构实现和链式结构实现
性质:后进先出(LIFO)--last in first out
二:栈的应用实战--编译器符号成对检测
当需要检测成对出现但又互不相邻的事物时,使用栈的“后进先出”特性
算法思路
从第一个字符开始扫描
当遇见普通字符时忽略,当遇见左符号时压入栈中
当遇见右符号时从栈中弹出栈顶符号
进行匹配
匹配成功,继续读入下一个字符
匹配失败,立即停止,并报错
结束
成功:所有字符扫描完毕,且栈为空
失败:匹配失败或所有字符扫描完毕但栈非空
算法框架
三:栈的应用实战--计算器程序的实现
中缀表达式和后缀表达式
中缀表达式符合人们的思维习惯
后缀表达式符合计算机的运算方式
5+3 ——>53+
1+2*3 ——>123*+
9+(3-1)*5+8/2——>931-5*+82/+
中缀表达式转后缀表达式
对于数字:直接输出
对于符号:
左括号:进栈
符号:与栈顶符号进行优先级比较
栈顶符号优先级低:进栈
栈顶符号优先级不低:将栈中符号全部弹出并输出,之后进栈
右括号:将栈顶符号弹出并输出,直到匹配左括号
遍历结束:将栈中所有符号弹出并输出
算法框架
后缀表达式的计算
对于数字:进栈
对于符号:
从栈中弹出右操作数
从栈中弹出左操作数
根据符号进行运算
将运算结果压入栈中
遍历结束:栈中唯一数字为计算结果
算法框架