stack数据结构的.pptVIP

  • 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)

1亿VIP精品文档

相关文档