网站大量收购独家精品文档,联系QQ:2885784924

chap3堆栈与队列.ppt

  1. 1、本文档共117页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chap3堆栈与队列

第三章 栈和队列 四类基本结构: 栈与队列的逻辑特征: 1. 基本概念 1. 基本概念 栈的抽象数据类型定义 1. 顺序栈 2. 顺序栈的基本操作: 3. 顺序栈的基本操作——初始化函数 3. 顺序栈的基本操作——判断栈是否为空 3. 顺序栈的基本操作——判断栈是否为满 3. 顺序栈的基本操作——入栈 3. 顺序栈的基本操作——出栈 3. 顺序栈的基本操作——取栈顶元素 4. 顺序栈的基本操作特点 5. 顺序栈的描述方式2 5. 顺序栈的描述方式3 6. 顺序栈上溢的解决方法 7. 双端栈 7. 双端栈 7. 双端栈的基本操作: 7. 双端栈的基本操作——初始化函数 7. 双端栈的基本操作——入栈函数 7. 双端栈的基本操作——出栈函数 8.链栈的基本概念 8.链栈的特点 9. 链栈的描述: 10. 链栈的基本操作——入栈 10. 链栈的基本操作——入栈 10. 链栈的基本操作——出栈 11.链栈的基本操作特点 12. 多栈的描述: 12. 多链栈:将多个链栈的栈顶指针存放在 一个一维指针数组中统一管理 12. 多栈的基本操作——初始化 12. 多栈的基本操作——入栈 12. 多栈的基本操作——出栈 括号匹配算法 问题分析: C编译系统对递归函数的自调用次数没有限制 2. 递归应用示例: 递归算法的两要素: 问题分解:将问题分解为相同性质且规模更小的问题。 递归结束条件:必须给出递归的结束条件,否则递归会无限循环下去。 练习:数组元素的查找(折半查找) 练习:数组元素的查找(折半查找) 设计递归算法的方法 递归应用示例——汉诺(hanoi)问题 若将n个盘片按规定从A塔移至C塔: 把A塔上的n-1个盘片借助C塔移至B塔 把第n个盘片从A塔移至C塔 把B塔上的n-1个盘片借助A塔移至C塔 算法用函数hanoi(n,x,y,z)以递归算法实现 1. 基本概念 1. 基本概念 队列的抽象数据类型定义 1. 链队列 2. 链队列的描述: 2. 链队列的描述: 3. 链队列的基本操作——初始化 3. 链队列的基本操作 3. 链队列的基本操作——入队 3. 链队列的基本操作——出队 4. 循环队列——顺序映射 4. 循环队列——顺序映射 4. 循环队列——顺序映射 4. 循环队列——顺序映射 5. 循环队列的基本操作: 5. 循环队列的基本操作——初始化 5. 循环队列的基本操作——判空 5. 循环队列的基本操作——判满 5. 循环队列的基本操作——入队列 5. 循环队列的基本操作——出队列 5. 循环队列的基本操作——取队头元素 5. 循环队列的基本操作——求长度 5. 循环队列的基本操作特点 0 1 2 3 4 rear front rear A B C rear rear rear rear 队空条件: 队满条件: rear = front rear = front D E 如何区分队空与队满呢? rear front rear rear 0 4 0 1 2 3 4 rear A B C D 循环队列的队空和队满判断问题解决方案一 rear 队空条件: 队满条件: rear = front (rear +1) % maxsize = front #define MAXSIZE 初始分配量 typedef struct { ElemType elem[MAXSIZE]; int front; int rear; }SeqQueue; (最简单、最常用) //头指针,指向队头元素 //尾指针,指向队尾元素的 下一个位置 ①循环队列的初始化 ②循环队列的判断队列是否为空 ③循环队列的判断队列是否为满 ④循环队列的入队 ⑤循环队列的出队 ⑥循环队列的取队头元素 ⑦循环队列的求长度 void InitQueue(SqQueue *Q) { Q-front=0; Q-rear=0; } rear front 0 4 0 1 2 3 4 int IsEmpty(SqQueue *Q) { if(Q-front==Q-rear) return TRUE; return FALSE; } int IsFull(SqQueue *Q) { if((Q-rear+1)%MAXSIZE==Q-front) return TRUE; return FALSE; } rear rear front rear rear 0 4 0 1 2 3 4 rear A B C D int EnQueue(SqQueue *Q,ElemType x) { if((Q-rear+1)%MAXSIZE==Q-front

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档