本文为数据结构之线性结构(堆栈),根据网课而整合的笔记。
计算机如何进行表达式求值?
-
表达式由两类对象构成:
- 运算数,如2、3、4
- 运算符号,如+、-、*、/
-
不同运算符号优先级不一样
后缀表达式
-
中缀表达式:运算符号位于两个运算数之间。如,a+b*c-d/e
-
后缀表达式:运算符号位于两个运算数之后。如,abc*+de/-
【例】62/3-42*+=?
后缀表达式求值策略
:从左向右“扫描”,逐个处理运算数和运算符号
1.遇到运算数怎么办?如何“记住”目前还不参与运算的数?
2.遇到运算符号怎么办?对应的运算数是什么?
启示:需要有种存储方法,能顺序存储算数,并在需要时“倒序”输出
堆栈的抽象数据类型描述
堆栈(Stack):具有一定操作约束的线性表
-
只在一堆(栈顶,Top)做插入、删除
-
插入数据:入栈(Push)
-
删除数据:出栈(Pop)
-
后入先出原则:Last In First Out(LIFO)
类型名称
:堆栈(Stack)
数据对象集
:一个有0或多个元素的有穷线性表。
操作集
:长度为MaxSize的堆栈S<-Stack,堆栈元素item<-ElementType
1.Stack CreateStack(int MaxSize): 生成空堆栈,其最大长度为MaxSize;
2.int IsFull(Stack S,int MaxSize):判断堆栈S是否已满;
3.void Push(Stack S,ElementType item):将元素item压入堆栈
4.int IsEmpty(Stack S):判断堆栈S是否为空;
5.ElementType Pop(Stack S):删除并返回栈顶元素;
ps:Push和Pop可以穿插交替进行;
例图:
栈的顺序存储实现
栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成。
#define MaxSize <储存数据元素的最大个数>
typedef struct SNode*Stack;
struct SNode{
ElementType Data[MaxSize];
int Top;
};
(1)入栈
void