数据结构系列内容的学习目录 → \rightarrow →浙大版数据结构学习系列内容汇总。
2. 堆栈
2.1 什么是堆栈
计算机如何进行表达式求值?
例: 算术表达式 5 + 6 / 2 − 3 ∗ 4 5+6/2-3* 4 5+6/2−3∗4,正确理解为 5 + 6 / 2 − 3 ∗ 4 = 5 + 3 − 3 ∗ 4 = 8 − 3 ∗ 4 = 8 − 12 = − 4 5+6/2-3* 4=5+3-3* 4=8-3* 4=8-12 =-4 5+6/2−3∗4=5+3−3∗4=8−3∗4=8−12=−4。
• 由两类对象构成:
⋄ \diamond ⋄ 运算数,如2、3、4
⋄ \diamond ⋄ 运算符号,如+、-、*、/
• 不同运算符号优先级不一样
中缀表达式: 运算符号位于两个运算数之间。如, a + b ∗ c − d / e a+b*c- d/e a+b∗c−d/e。
后缀表达式: 运算符号位于两个运算数之后。如, a b c ∗ + d e / − a b c*+d e/- abc∗+de/−。
例如 5 + 6 / 2 − 3 ∗ 4 5+6/2-3* 4 5+6/2−3∗4可以表达为 62 / 3 − 42 ∗ + 62/3-42*+ 62/3−42∗+。
后缀表达式求值策略:从左向右“扫描”,逐个处理运算数和运算符号。
1. 遇到运算数怎么办?如何“记住”目前还未参与运算的数?
2. 遇到运算符号怎么办?对应的运算数是什么?
启示: 需要有种存储方法,能顺序存储运算数,并在需要时“倒序”输出!
栈(stack)又名堆栈,它是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
堆栈是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。
堆栈(Stack): 具有一定操作约束的线性表
⋄ \diamond ⋄ 只在一端(栈顶, Top)做插入、删除
⋄ \diamond ⋄ 插入数据:入栈(Push)
⋄ \diamond ⋄ 删除数据:出栈(Pop)
⋄ \diamond ⋄ 后入先出:Last In First Out (LIFO)
2.2 堆栈的抽象数据类型描述
类型名称: 堆栈(Stack)
数据对象集: 一个有0个或多个元素的有穷线性表
操作集: 长度为MaxSize的堆栈S ∈ ∈ ∈ Stack,堆栈元素item ∈ ∈ ∈</