第3章栈和队列(part1).ppt_第1页
第3章栈和队列(part1).ppt_第2页
第3章栈和队列(part1).ppt_第3页
第3章栈和队列(part1).ppt_第4页
第3章栈和队列(part1).ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

第三章栈和队列 主讲 戚玉涛 主要内容 3 1栈3 2栈的应用举例3 3栈与递归的实现3 4队列 引言 本章我们将学习两种重要而特殊的线性数据结构 栈和队列从逻辑结构角度看 它们是线性表从运算角度看 它们的基本运算是线性表运算的子集 是操作受限的线性表 引言 通常称 栈和队列是限定插入和删除只能在表的 端点 进行的线性表 线性表栈队列Insert L i x Insert S n 1 x Insert Q n 1 x 1 i n 1Delete L i Delete S n Delete Q 1 1 i n 栈和队列是两种常用的数据类型 3 1栈 栈的定义 限定仅在表尾进行插入或删除操作的线性表 S a1 a2 an 栈底 Bottom 表头端称为栈底 栈顶 Top 表尾端称为栈顶 进栈 入栈 栈的插入操作 出栈 退栈 删除操作 空栈 不含元素的空表 栈底元素 a1 栈顶元素 an 栈的抽象数据类型定义 ADTStack 数据对象 D ai ai ElemSet i 1 2 n n 0 数据关系 R1 ai 1 ai D i 2 n 约定an端为栈顶 a1端为栈底 ADTStack 基本操作 栈的特点 很窄的死胡同 后进先出 LastInFirstOut 简称LIFO结构 栈又称后进先出线性表 栈的基本运算初始化InitStack S 构造一个空栈入栈Push S e 栈S已经存在 插入e为新的栈顶元素出栈Pop S e 栈S存在且非空 删除栈顶元素 e返回读栈顶元素GetTop S e 栈S存在且非空 用e返回栈顶元素判栈空StackEmpty S 栈S存在 若为空栈 返回真 否则假 栈的表示和实现 线性表 顺序表 链表 单链表 双链表 循环链表 双向 单向 栈 顺序栈 链栈 顺序栈 顺序栈 栈的顺序存储结构 是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素 设置指针top指向栈顶元素在顺序栈中的位置 栈的顺序存储表示 defineSTACK INIT SIZE100 defineSTACKINCREMENT10 typedefstruct SElemType base SElemType top intstacksize SqStack 顺序栈的类型定义 typedefstruct SElemType base 栈底指针SElemType top 栈顶指针 intstacksize 栈已分配的空间大小 SqStack 动态分配typedefstruct SElemTypedata MAXSIZE inttop SqStack 静态分配 顺序栈的动态分配和静态分配 SqStackS 栈结构不存在S base NULL 空栈S base S top 栈满S top S base S stacksize 空栈top 0 栈满top MAXSIZE 空栈 栈中有三个元素 满栈 顺序栈中的进栈和出栈栈仅在表的一端进行操作 top指针始终指向栈顶元素的下一位置 例 在栈中插入元素A和B A B 例 删除栈顶元素B和A 删除B ERROR 顺序栈 初始化栈 StatusInitStack SqStack 入栈操作StatusPush SqStack 出栈操作StatusPop SqStack 读栈顶元素GetTop SqStackS SElemType 链栈 链栈 栈的链式表示优点 没有容量限制 在内存允许的范围内不会出现溢出typedefstructSTNode SElemTypedata structSTNode next STNode LinkStack 初始化InitStack LinkStack 读栈顶元素GetTop LinkStackS SElemType 入栈Push LinkStack 出栈Pop LinkStack 栈总结栈是一种具有线性结构的数据结构 是操作受限的线性表 栈的特点是后进先出 只能在栈顶进行插入和删除操作 分别称为入栈和出栈 顺序栈中 栈空标志 S top S base 栈满标志 S top S base S stacksize 链栈中 不设头结点 头指针就是栈顶指针 栈空S NULL 练习 1 设一个栈的输入序列为A B C D 则借助一个栈所得到的输出序列不可能是 A A B C D B D C B A C A C D B D D A B C答 可以简单地推算 得容易得出D A B C是不可能的 因为D先出来 说明A B C D均在栈中 按照入栈顺序 在栈中顺序应为D C B A 出栈的顺序只能是D C B A 所以本题答案为D 练习 2 已知栈的输入序列为1 2 3 n 输出序列为a1 a2 an 若a1 n 问ai ai n i 13 I表示入栈 O表示出栈 若元素入栈顺序为1234 为了得到1342的出栈顺序 相应的I和O的操作串是什么 I1O1I2I3O3I4O4O2 4 设n个元素进栈序列是1 2 3 n 其输出序列是p1 p2 pn 若p1 3 则p2的值 A 一定是2 B 一定是1 C 不可能是1 D 以上都不对答 当p1 3时 说明1 2 3先进栈 立即出栈3 然后可能出栈 即为2 也可能4或后面的元素进栈 再出栈 因此 p2可能是2 也可能是

温馨提示

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

评论

0/150

提交评论