1.栈的概念
栈是一种基于先进后出(FILO)或者后进先出(LIFO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

2.栈的应用
(1)浏览器 "回退" 功能的实现,底层使用的就是栈存储结构。当你关闭页面 A 时,浏览器会将页面 A 入栈;同样,当你关闭页面 B 时,浏览器也会将 B入栈。因此,当你执行回退操作时,才会首先看到的是页面 B,然后是页面 A,这是栈中数据依次出栈的效果。
(2)表达式求值

(3)数制的转换,比如给定十进制数N=1348,转换为八进制数R=2504
(4)二叉树的遍历
2.顺序栈

(1)、顺序栈的描述结构体

(2)、顺序栈的初始化

3.链式栈



4.栈的应用
1、数值转换
2、括号匹配
假设表达式中允许出现两种括号:圆括号()和方括号[],其嵌套的顺序随意,即( [ ( ) ( ) ] )或者 [ ( [ ] [ ] ) ]等为正确的表达式,但是 ( [ ( ] ) 或者 [ ( [ ) ] 或者 ( [ ( ] ) )等为错误的表达式。检查括号是否匹配可以采用如下逻辑:
- 遍历整个表达式
- 如果是左括号入栈
- 如果是右括号则从栈中出栈一个括号,如果与右括号匹配则继续往后遍历,如果不匹配则说明是错误的表达式
- 如果表示遍历完毕,最后栈为空说明表达式正确否则说明表达式错误
3、 表达式求值
需求:输入一个表达式,含加减乘除括号运算,输出表达式的值
例如:求20+(3*400)-100/3的值
逻辑:
- 使用两个栈,一个栈存放操作符,一个栈存放操作数
- 遍历整个表达式,如果是操作数入栈操作数栈
- 如果是操作符,则获取操作符栈的栈顶元素,比较两个操作符的优先级,如果比栈顶的操作符优先级低或者相等,则出栈一个操作符,出栈两个操作数,将计算结果入操作数栈
- 如果比栈顶的操作符优先级高则直接入栈操作符栈
- 如果遇到的是左括号 ( , 则直接入栈操作符栈
- 如果是右括号 ),则从操作符栈出栈一个操作符,出栈两个操作数,将计算结果入操作数栈,直到将左括号出栈
1337

被折叠的 条评论
为什么被折叠?



