- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构——第4章 栈和队列11
【教学内容】 归并排序;堆排序;基数排序以及各种排序算法比较 【教学要求】 1.熟悉快速排序、归并排序、堆排序和基数排序的思想 排序过程及其依据的原则,对给定关键字的序列能够熟练 写出各种排序算法的排序过程。 2. 掌握各种排序方法的时间复杂度。了解各种排序算 法的平均情况和最坏情况的时间性能。 3. 掌握各种排序方法的优缺点比较及排序方法的选择。 【重点与难点】 快速排序、归并排序、堆排序和基数排序算法的排序 过程和算法;各种排序算法的平均情况和最坏情况的时间 性能及比较。 4.1 栈(Stack) §4.1 栈 【教学内容】 栈、存储结构、基本操作实现算法以及栈的应用。 【教学要求】 掌握栈逻辑结构的特点。 掌握栈的不同存储方式的基本操作实现方法。 掌握栈的在实际问题应用。 【重点与难点】 顺序栈和链栈两种存储基本操作实现算法 栈的在实际问题中应用 讨论:栈是什么?它与一般线性表有什么不同? 表和栈的操作区别——对线性表 s a1 , a2 , …. , an-1 , an 顺序栈入栈操作Push函数——例如用栈存放(A,B,C,D) (注意要遵循“后进先出” 原则) 顺序栈出栈操作POP函数——例如从栈中取出‘B’ (注意要遵循“后进先出” 原则) 例1:一个栈的输入序列是12345,若在入栈的过程中允许出栈,则栈的输出序列43512可能实现吗?12345的输出呢? 43512不可能实现,主要是其中的12顺序不 能实现; 12345的输出可以实现,只需压入一个立即 弹出一个即可。 例3一个栈的输入序列为123,若在入栈的过程中允许出栈,则可能得到的出栈序列是什么? 链 栈 说 明 讨论:为什么要设计堆栈?它有什么独特用途? 调用函数或子程序非它莫属; 递归运算的有力工具; 用于保护现场和恢复现场; 简化了程序设计的问题。 例4.3 背包问题 P70 假设有一个能装入总体积为T的背包和n件体积分别为w1,w2, …, wn的物品,能否从n件物品中挑选若干件恰好装满背包,即使wi1+wi2+…+wik T,要求找出所有满足上述条件的解。 例如:当T 10,各件体积为 1,8,4,3,5,2 时,可找到下 列4组解: 1,4,3,2 、 1,4,5 、 8,2 和 3,5,2 。 §4.3 队列 【教学内容】 栈、存储结构、基本操作实现算法以及栈的应用。 【教学要求】 掌握队列逻辑结构的特点。 掌握链队列和循环队列两种队列的基本操作实现方法。 掌握队列的在实际问题应用。 【重点与难点】 链队列和循环队列两种存储基本操作实现算法 循环队列基本算法实现,假溢出的解决方案,队空、队满的判定条件;队列的在实际问题中应用 链队列示意图 顺序队示意图 例2 :数组Q[n]用来表示一个循环队列,f 为当前队列头元素的前一位置,r 为队尾元素的位置。假定队列中元素的个数小于n,计算队列中元素的公式为: (A) r-f (B)(n+f-r)% n (C)n+r-f (D) (n+r-f)% n 讨论:为什么要设计队列?它有什么独特用途? 离散事件的模拟(模拟事件发生的先后顺序); 操作系统中多道作业的处理(一个CPU执行多个作业); 3.简化程序设计。 讨论(代本章小结) 线性表、栈与队的异同点 相同点: 逻辑结构相同,都是线性的;都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表(只是对插入、删除运算加以限制)。 不同点: ① 运算规则不同,线性表为随机存取,而栈是只允许在一端进行插入和删除运算,因而是后进先出表LIFO;队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表FIFO。 ② 用途不同,线性表比较通用;栈用于函数调用、递归和简化设计等;队列用于离散事件模拟、多道作业处理和简化设计等。 4种公式哪种合理? 当 r ≥f 时(A)合理; 当 r f 时(C)合理; 分析 : 综合2种情况,以(D)的表达最为合理 例3:在一个循环队列中,若约定队首指针指向队首元素的前一个位置。那么,从循环队列中删除一个元素时,其操作是 先 ,后 。 移动队首指针 取出元素 √ front rear J2 J3 J1 J4 J5 队列是特殊的线性表,其顺序存储与线性表的顺序存储类似 const QUEUEINCREMENT 10 //最大队列长度 typedef struct QElemType *elem; // 存储队列元素的数组 int front; // 头指针,若队列不空, // 指向队列头元素 int rear; // 尾指针,若队列不空, // 指向队列尾元素 的下一个位置 int que
您可能关注的文档
最近下载
- 心理卫生与心理咨询填空题.doc VIP
- 2023高考英语复习之高频词长难句练习2 全国乙卷七选五(解析版).pdf VIP
- 【高中化学】13个知识点的易错集锦.pdf VIP
- 现场签证单表格.docx VIP
- 中央财经大学后勤处、后勤服务产业集团 全员聘用管理暂行办法.doc VIP
- 2025中央财经大学后勤服务产业集团工程管理岗招聘1人(非事业编制)笔试备考试题及答案解析.docx VIP
- 最新国家开放大学国开电大《离散数学》形考任务+大作业答案.pdf VIP
- 现场签证单表格优质资料.doc VIP
- 24J331地沟及盖板参考图集.docx
- 汽车维修清单表(含使用说明).docx VIP
文档评论(0)