1.两种特殊的线性表
顺序存储和链式存储
特点:插入和删除可以在表的任何位置进行。
问题:
栈(LIFO)队列(FIFO)
主要内容:栈的定义,堆栈的表示和实现,堆栈的操作方式,顺序栈和链栈及其操作。
1.栈的抽象数据类型定义
~火车站的调度情况:一个有终结点的火车道,每节火车车厢进出该轨道的规则是什么样子的?
·必须遵循LIFO规则。只能在栈顶插入和删除的线性表,其特征为LIFO。
空栈:不含元素的空表
思考题:进栈的序列为123,两侧铁道均为单向行驶道,那么他们出栈的顺序会有几种,分别是怎么排列的。
3!=6,加上规则LIFO之后。
····抽象数据类型定义:
ADT Stack{数据对象,数据关系同线性表
基本操作:
IniStack(&S),DestoryStack(&S),
ClearStack(&S),StackEmpty(S),
StackLength(&S),GetTop(S),
Push(&S,e),Pop(&S,&e).
Stack Travers(S,visit())
}
栈的表示和存储:顺序栈和链栈
(1)栈的顺序存储
(2)栈的链式存储
TOP的作用是什么;
顺序栈的表示和实现:顺序表示,
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}sqStack;栈顶指针指向栈顶元素的下一个位置(即下次压栈时元素所放的位置)
顺序栈的结构 空栈 top = base
非空非满栈 top是空的
满栈 条件:top-base>= stacksize
栈的基本操作
链栈的结构: