第3章栈和队列——操作受限的线性表.pptVIP

  • 37
  • 0
  • 约2.34万字
  • 约 91页
  • 2016-09-26 发布于天津
  • 举报

第3章栈和队列——操作受限的线性表.ppt

第3章栈和队列——操作受限的线性表.ppt

第3章 栈和队列 ——操作受限的线性表 3.1 栈 3.1.1抽象数据类型栈的定义 3.1.2栈的表示与实现 3.2 栈的应用举例 3.2.1 数制转换 3.2.4 迷宫求解 3.2.5 表达式求值 *3.3 栈和递归的实现 3.4 队列 3.4.1抽象数据类型队列的定义 3.4.2 链队列——队列的链式表示与实现 3.4.3 循环队列——队列的顺序表示与实现 3.1 栈 栈(stack): 先进后出( FILO)的线性表。 或后进先出( LIFO)的线性表。 或仅在表尾进行插入和删除操作的线性表。 栈顶(top): 线性表的表尾端,即可操作端。 栈底(bottom): 线性表的表头。 栈的抽象数据类型 ADT Stack { 数据对象:D = {ai | ai属于Elemset,(i=1,…,n,n≥0)} 数据关系:R1 = {<ai-1,ai>|ai-1,ai属于D,(i=2,3,…,n)} 约定an为栈顶, a1为栈底。 基本操作: InitStack(S); DestroyStack(S); ClearStack(S); StackEmpty(S); StackLength(S) ; GetTop(S,e); Push(S,e); Pop(S,e); StackTraverse(S,visit ()) }ADT Stack 栈的基本操作(之一) InitStack(S) 操作结果:构造一个空的栈S。 DestroyStack(S) 初始条件: 栈S已经存在。 操作结果: 销毁栈S。 ClearStack(S) 初始条件: 栈S已经存在。 操作结果: 将栈S重置为空栈。 栈的基本操作(之二) StackEmpty(S) 初始条件: 栈S已经存在。 操作结果: 若栈S为空栈,则返回TURE;否则返回FALSE。 StackLength(S) 初始条件: 栈S已经存在。 操作结果: 返回栈S中的数据元素个数。 GetTop(S,e) 初始条件: 栈S已经存在且非空。 操作结果: 用e返回栈S中栈顶元素的值。 栈的基本操作(之三) Push(S,e) 初始条件: 栈S已经存在。 操作结果: 插入元素e为新的栈顶元素。 Pop(S,e) 初始条件: 栈S已经存在且非空。 操作结果: 删除S的栈顶元素并用e返回其值。 StackTraverse(S,visit ()) 初始条件: 栈S已经存在且非空。 操作结果: 从栈底到栈顶依次对S的每个元素调用函数visit ()。一旦visit ()失败,则操作失败。 关于栈的题目 已知三张火车编号为1,2,3,入站的先后次序为1,2,3,任何时候火车都可能出站,请写出所有可能的出站顺序。 1,2,3 1,3,2 2,1,3 2,3,1 3,2,1 关于栈的题目 若有n个同学按1,2,3,4,…,n的顺序进入,而出电影院的顺序为S1,S2,S3,…,Sn,当S1=n时则Si为( )。 A. i B. n-i C. n-i+1 D. 不确定 关于栈的题目 若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1, p2, p3, …,pn,若pn=n,则pi(1≤i≤n)为( )。 A. i B. n=i C. n-i+1 D. 不确定 关于栈的题目 若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1, p2, p3, …,pn,若p1=3,则p2为( )。 A. 可能是2 B. 不一定是2 C. 可能是1 D. 一定是1 关于栈的题目 若已知一个栈的进栈序列是p1,p2,p3,…,pn,输出序列为1, 2, 3, …,n,若p3=1,则p1为( )。 A. 可能是2 B. 一定是2 C. 不可能是2 D. 不可能是3 关于栈的题目 若已知一个栈的进栈序列是p1,p2,p3,…,pn,输出序列为1, 2, 3, …,n,若pn=1,则pi(1≤in)为( )。 A. n-i+1 B. n-I C. i D. 有多种可能 3.1.2 栈的顺序表示与实现(顺序栈) typedef struct{ SElemType *base; //在栈构造前和销毁后,值为NULL SElemType *top; // 栈顶指针 int stacksize; //当前已分配的存储空间个数 }Sq

文档评论(0)

1亿VIP精品文档

相关文档