- 3
- 0
- 约1.03万字
- 约 68页
- 2017-08-20 发布于浙江
- 举报
stack数据结构的
第三章 栈和队列;掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正确选用它们。
熟练掌握栈类型的两种实现方法,即两种存储结构表示时的基本操作实现算法,特别应注意栈满和栈空的条件以及它们的描述方法。
熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的描述方法。 ;课前思考;栈和队列是两种常用的数据类型;3.1 栈的类型定义;栈的定义和特点
定义:限定仅在表尾进行插入或删除操作的线性表,表尾对应栈顶,表头对应栈底,不含元素的空表称空栈。
往栈顶插入元素的操作为“入栈”,称删除栈顶元素的操作为“出栈”。
因为后入栈的元素先于先入栈的元素出栈,故被称为是一种后进先出的结构
特点:先进后出(FILO)或后进先出(LIFO)
;;;思考题:铁道进行火车调度时,总把站台设成栈式
(1)设有编号为1,2,3,4的四辆列车,顺序进入栈内,问可能得到哪些出栈顺序?
1,2,3,4 1,2,4,3 1,3,2,4 1,3,4,2 1,4,3,2
2,1,3,4 2,1,4,3 2,3,1,4 2,3,4,1 2,4,3,1
3,2,1,4 3,2,4,1 3,4,2,1 4,3,2,1 共14种
结论:当输入元素数目为n,即输入序列为1,2,…,n
时,经过栈的运算后可获得的输出序列的个数由
尤.卡塔南数决定为:(2n)!/n!n!(n+1)
(2)若进栈顺序为1,2,3,4,5,6问能否得到4,3,5,6, 1,2; 3,2,5,6,4,1; 1,5,4,6,2,3; 1,3,5,4,2,6的出栈顺序,为什麽?;讨论1:栈是什么?它与一般线性表有什么不同?;ADT Stack {数据对象:D={ai|ai∈ElemSet, i=1,2,...,n, n≥0 }数据关系:R={ai-1, ai| ai-1,ai∈D,i=2,...,n }约定an 端为栈顶,a1 端为栈底。基本操作:InitStack(S)操作结果:构造一个空栈S。DestroyStack(S)初始条件:栈S已存在。 操作结果:栈S被销毁。ClearStack(S)初始条件:栈S已存在。 操作结果:将S清为空栈。
StackEmpty(S)初始条件:栈S已存在。 操作结果:若栈S为空栈,则返回TRUE,否则FALE。 ;基本操作: (续)
StackLength(S)初始条件:栈S已存在。 操作结果:返回S的元素个数,即栈的长度。GetTop(S, e)初始条件:栈S已存在且非空。操作结果:用e返回S的栈顶元素。Push(S, e)初始条件:栈S已存在。 操作结果:插入元素e为新的栈顶元素。Pop(S, e)初始条件:栈S已存在且非空。操作结果:删除S的栈顶元素,并用e返回其值。} ADT Stack ;
栈的顺序存储结构简称为顺序栈,是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指向实际栈顶后的空位置。
; a1;顺序栈的类型定义如下:
# define STACK__INIT__SIZE 100;//存储空间初始分配量
#define LISTINCREMENT 10;//存储空间分配增量
typedef structure{
SElemType *base; //栈底指针,在构造和销毁之前为null
SElemType *top; //栈顶指针
int stacksize;//当前已分配的存储空间,以元素为单位
}SqStack;;Stacksize 指示栈的当前可使用的最大容量。栈的初始化操作为:按设定的初始分配量进行第一次存储分配;
base可称为栈底指针,在顺序栈中它始终指向栈底的位置,若base的值为NULL,则表明栈结构不存在。
top为栈顶指针,其初值指向栈底,即top=base可作为栈空的标记;
每当插入新的栈顶元素时(入栈),堆栈指针top先压后加(S[top++]=an+1); ;
删除栈顶元素时(出栈),堆栈指针top先减后弹
(e=S[--top])
非空栈中的栈顶指针始终在栈顶元素的下一个位置。 ;栈顶指针top,指向实际栈顶
后的空位置,初值为0;;1、构造一个空栈
int InitStack(SqStack s){
s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
If (!s.base) exit(-1);
s.top=s.base; //
原创力文档

文档评论(0)