数据结构课件-栈和队列.ppt_第1页
数据结构课件-栈和队列.ppt_第2页
数据结构课件-栈和队列.ppt_第3页
数据结构课件-栈和队列.ppt_第4页
数据结构课件-栈和队列.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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循环队列 队列的顺序表示与实现 第三章栈和队列 栈 stack 先进后出 FILO 的线性表 或后进先出 LIFO 的线性表 或仅在表尾进行插入和删除操作的线性表 栈顶 top 线性表的表尾端 即可操作端 栈底 bottom 线性表的表头 3 1栈3 1 1抽象数据类型栈的定义 栈底 栈顶 a1 a2 a3 an 1 栈的抽象数据类型 ADTStack 数据对象 D ai ai属于Elemset i 1 2 n n 0 数据关系 R1 ai 1 ai ai 1 ai属于D i 2 3 n 约定an为栈顶 a1为栈底 基本操作 InitStack StackTraverse S visit ADTStack 栈的基本操作 之一 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 失败 则操作失败 3 1 2栈的顺序表示与实现 顺序栈 typedefstruct SElemType base 在栈构造之前和销毁之后 base的值为NULL SElemType top 栈顶指针 intstacksize 当前已分配的存储空间 以元素为单位 SqStack defineSTACK INIT SIZE100 defineSTACKINCREMENT10 defineOK1 defineOVERFLOW 1 defineERROR0 顺序栈示意图 初始空栈 top base stacksize STACK INIT SIZE 顺序栈 顺序栈的操作实现举例InitStack 构造一个空的栈S StatusInitStack SqStack s s base SElemType malloc STACK INIT SIZE sizeof SElemType if s base return OVERFLOW s top s base s stacksize STACK INIT SIZE returnOK InitStack 顺序栈的操作实现 GetTop 栈S非空 则用e返回栈S中栈顶元素的值 并返回OK 则返回ERROR StatusGetTop SqStacks SElemType e if s top s base returnERROR e s top 1 returnOK GetTop s e s top 1 顺序栈的操作实现 Push 插入元素e为新的栈顶元素 StatusPush SqStack s SElemTypee if s top s base s stacksize 栈满 追加存储空间 l temp SElemType realloc s base s stacksize STACKINCREMENT sizeof SElemType if l temp return OVERFLOW s base l temp s top s base s stacksize s stacksize STACKINCREMENT s top e returnOK Push 插入新的栈顶元素时 堆栈变化示意 栈满时 追加存储空间 s top e 顺序栈的操作实现 Pop 栈S非空 则删除S的栈顶元素 用e返回栈S中栈顶元素的值 并返回OK 否则返回ERROR StatusPop SqStack s SElemType e if s top s base returnERROR e s top returnOK Pop s e s top 3 2栈的应用举例3 2 1数制转换 N Ndivd d Nmodd 1348 1348 8 8 1348 8例 1348 10 2504 8N Ndiv8 Nmod8134816841682102125202先进后出 数据生成的顺序 4 0 5 2读出的顺序 2 5 0 4 4 0 5 2 数制转换算法 算法3 1 输入一个非负的十进制数 输出等值的八进制数 voidconversion InitStack conversion defineSTACK INIT SIZE100 defineSTACKINCREMENT10 defineOK1 defineOVERFLOW 1 defineERROR0typedefstruct int base int top intstacksize sqstack 栈使用的完整C程序实例 intinitstack sqstack s s base int malloc STACK INIT SIZE sizeof int s top s base s stacksize STACK INIT SIZE returnOK voidpop sqstack s int e if s top s base returnERROR e s top voidpush sqstack s inte if s top s base s stacksize s base int realloc s base s stacksize STACKINCREMENT sizeof int if s base exit OVERFLOW s top s base s stacksize s stacksize STACKINCREMENT s top e main sqstacks intn m e initstack 3 2 4迷宫求解例1 start 1 1 end 1 4 012345 012345 当前位置 栈s seat的变化 迷宫求解的算法思想 设定当前位置的初值为入口位置 do 若当前位置可通 则 将当前位置插入栈顶 若该位置是出口位置 则结束 否则切换当前位置的东邻方块为新的当前位置 否则若栈不空且栈顶位置尚有其它方向未经探索 则设定新的当前位置为顺时针方向旋转找到的栈顶位置的下一相邻块 若栈不空但栈顶位置的四周均不可通 则 删去栈顶位置 若栈不空 则重新测试新的栈顶位置 直至找到一个可通的相邻块或出栈至空栈 while 栈不空 迷宫求解的算法 typedefstruct intord PosTypeseat intdi SElemType StatusMazePath MazeTypemaze PosTypestart PosTypeend InitStack s curpos start curstep 1 do if Pass curpos 当前位置可通FootPrint curpos 留下足迹e curstep curpos 1 Push s e 加入路径if curpos end return TRUE 到达终点 出口 curpos NextPos curpos 1 下一个位置是当前位置的东邻方块curstep 探索下一步 else 当前位置不能通过if StackEmpty s Pop s e While e di 4 MazePath

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论