栈的定义
栈是一种特殊的线性表,仅能在线性表的一端进行操做
栈顶(Top):容许操做的一端
栈底(Bottom):不容许操做的一端
栈的性质:后进先出(LIFO)
栈的一些经常使用操做
建立栈
销毁栈
清空栈
进栈
出栈
获取栈顶元素
获取栈的大小
栈的存储实现
顺序存储实现
链式存储实现
小结
栈是一种特殊的线性表
栈只容许在线性表的一端进行操做
栈一般有两种实现方式
顺序结构实现,附件中01_SeqStatic文件夹
链式结构实现,附件中02_ListStatic文件夹算法
在C语言中有一些符号是成对匹配出现的,利用栈能够实现相似编译器括号是否匹配的能力。
算法思路:框架
从第一个字符开始扫描 当碰见普通字符时忽略,当碰见左符号时压入栈中 当碰见右符号时从栈中弹出栈顶符号 进行匹配 匹配成功:继续读入下一个字符 匹配失败:当即中止,并报错 结束: 成功:全部字符扫描完毕,且栈为空 失败:匹配失败或全部字符扫描完毕但栈非空
算法框架
小结
当须要检测成对出现但又互不相邻的事物时可使用栈“后进先出”的特性
栈很是适合于须要“就近匹配”的场合
代码实现,附件中02_ListStatic文件夹内ide
在数学计算中,人类习惯相似"9 + (3 - 1) * 5"这样的中缀表达形式,即数字在运算符号的两边,而对于计算机而言,更适合处理算式是后缀表达式,即相似"9 3 1 – 5 * +"这样的形式,所以必然有,从中缀表达式到后缀表达式的过程,而且计算机利用后缀表达式计算的过程,而这些均可以经过栈实现。
中缀表达式转换为后缀表达式的思路3d
遍历中缀表达式中的数字和符号 对于数字:直接输出 对于符号: 左括号:进栈 符号:与栈顶符号进行优先级比较 栈顶符号优先级低:进栈 栈顶符号优先级不低:将栈顶符号弹出并输出,以后进栈 右括号:将栈顶符号弹出并输出,直到匹配左括号 遍历结束:将栈中的全部符号弹出并输出
算法框架
后缀表达式计算的思路code
遍历后缀表达式中的数字和符号 对于数字:进栈 对于符号: 从栈中弹出右操做数 从栈中弹出左操做数 根据符号进行运算 将运算结果压入栈中 遍历结束:栈中的惟一数字为计算结果
算法框架
小结
中缀表达式是人习惯的表达方式
后缀表达式是计算机喜欢的表达方式
经过栈能够方便的将中缀形式变换为后缀形式
中缀表达式的计算过程相似程序编译运行的过程
代码实现,附件中02_ListStatic文件夹内blog
算法的实现:附件get