一、栈(Stack)
1.概述(逻辑结构)
后进先出的线性表,只允许在一端进行插入或删除操作。栈顶指针标示栈内元素。
栈的核心操作是进栈与出栈操作。
A 栈的定义
定义:只允许在一端进行插入或删除的线性表。
特点:后进先出的线性表。
栈顶 S.top。由栈顶指针指示。
顺序栈的栈顶指针记录数组位置的一个整型变量,初始S.top = -1
链栈的栈顶指针记录栈顶元素所在元素的指针,初始S.top = h。
物理结构分为:顺序栈和链栈。
B 栈的数学性质--卡特兰数又称卡塔兰数
当n个编号元素以某种顺序进栈,并可在任意时刻出栈,
所获得的编号元素排列的数目N恰好满足Catalan函数的计算,即N=C(2n,n)/(n+1)
C 栈的应用
进制转换、表达式求值、中缀表达式->后缀表达式、函数调用、函数递归。
2.基本操作
A 初始化一个空栈。InitStack(&S)
B 销毁栈,并释放栈S占用的存储空间。ClearStack(&S)
C 判断一个栈是否为空。StackEmpty(S)
D 元素x进栈。Push(&S,x)
E 栈顶元素出栈。Pop(&S,&x)
F 读取栈顶元素。GetTop(S,&x)
对栈采用顺序存储或链式存储,需要考率各个条件与算法流程。
栈空条件、栈满条件、进栈操作、出栈操作
3.顺序栈
A 顺序存储类型 SqStack
存放栈内元素的连续空间:ElemType data[MaxSize];
栈顶指针:int top;
栈顶指针:S.top,初始设置为S.top = -1;(空栈)
栈顶元素:S.data[S.top]。
进栈操作:栈不满时,栈顶指针先加1,再送到栈顶元素。
出栈操作:栈非空时,栈顶元素出去,栈顶指针减1.
栈空条件:S.top = -1;
栈满条件:S.top = MaxSize - 1;
栈长:S.top+ 1
顺序栈的缺点:顺序栈的内存空间确定,栈操作受数组上界的约束,易发生栈上溢。
栈满就是一种继续入栈就会上溢的状态,对下溢就是栈空的时候继续出栈所造成的结果。
B 基本运算
a.初始化 InitStack(&S)
b.判栈空 StackEmpty(S)
c.进栈 Push(&S,x)
栈顶指针先+1;元素再进栈。
d.出栈Pop(&S,&x)
元素先出栈,栈顶指针-1;
e.读取栈顶元素 GetTop(S,&x)