05--顺序表课程.pptVIP

  • 5
  • 0
  • 约6.28千字
  • 约 39页
  • 2016-09-26 发布于江苏
  • 举报
* * * * * * * * * * * * 顺序表应用的例题 案例 作为课程组长,段老师需要将几个老师已经按成绩高低排好的成绩表合成一个成绩表,请问他应该怎样操作? 算法动手做 准备一张白纸,裁成10张小纸条 在每张纸条写上不同的号码,代表不同的成绩,分成两列排好序。 规则:每次只能移动一张纸条。该怎样将两列纸条排成一个有序列。 要求:使用“从XXX开始,向XXX方向,逐个XXX”这种格式的语言来描述动手做的过程 50 34 66 58 67 70 80 78 88 80 顺序存储的线性表 例 例:合并两个线性递增表,合并后的表仍然是递增的。 功能:表的合并 输入:两个线性表 输出:合并后的表,保持递增性。 算法分析 例:合并两个线性递增表,合并后的表仍然是递增的。 算法实现分析 利用图形帮助分析 2 20 22 25 40 1 10 14 21 23 1 2 10 14 20 21 22 23 25 40 30 30 算法分析 例:合并两个线性递增表,合并后的表仍然是递增的。 算法实现分析 1、将两个表的元素进行逐个比较(从表头开始) 2、将较小的一项放在新的合并表内 3、较大的保留,较小表中的取下一项 4、最后当一个表的全部节点都放在合并表里后,将另一个表的剩余节点放进合并表。 table_type *merge(T_a, T_b, T_m){ int i_a , i_b , i_m; i_a = 0 , i_b = 0; i_m = 0; while(i_a T_a-length i_bT_b-length){ } if(T_a-data[i_a] = T_b-data[i_b]) i_a = i_a + 1; else i_b = i_b + 1; 三个指针 1)将两个表的元素进行逐个比较 2)将较小的一项放进新的合并表内 4)最后当一个表的全部节点都放在合并表里后,将另一个表的剩余节点放进合并表。 3)较大的一项保留,较小的取下一项 T_m-data[i_m] = min(T_a-data[i_a] , T_b-data[i_b]); i_m = i_m + 1; while(i_a T_a-length){ T_m-data[i_m] = T_a-data[i_a]; i_m = i_m + 1; i_a = i_a + 1; } while(i_b T_b-length){ T_m-data[i_m] = T_b-data[i_b]; i_m = i_m + 1; i_b = i_b + 1; } T_m-length = i_m –1; } 顺序存储的线性表 例 补充和完善 对长度越界的判断 其它更高效的算法实现? 思考: 1、本算法是利用了第三个表才完成的,如果要求只能在已有的两个表之一完成,该如何进行? 2、如果输入的两个线性表不是递增的,如何设计算法? 作业 教材第9题 请学有余力的同学完成:如果输入的两个线性表不是递增的,如何设计线性表递增合并的算法? * * * * * * * 总结、提炼关键词:按名单“逐个”通知 * 提炼,for循环,从前至后逐个访问 * * 提炼出关键词,从教师代表开始逐个向后挪动,让李校长坐到中间 * * 提炼关键词“从ai开始逐个向后,每个元素向后移动”和“从an开始逐个向前,每个元素向后移一格” * * * * * * 提炼出关键词,从教师代表开始逐个向后挪动,让李校长坐到中间 * * * * * 段景山 段景山 软件技术基础 制作 主讲 段景山 段景山 线性结构 第二章 线性数据结构 线性表 队列 栈 串 二维数组 1、线性表 元素及元素之间的关系为线性 线性表: (1)有且仅有一个开始节点(该节点只有一个后继节点,没有前趋节点) (2)有且仅有一个结束节点(该节点只有一个前趋节点,没有后继节点) (3)其余节点有且仅有一个前趋和一个后继 k1 k2 k3 k4 k1 k2 k3 顺序存储的线性表 1.1、用数组实现线性表(顺序存储、顺序表) 线性表元素:a1、a2、a3、a4.... 数组元素: a[0]、a[1]、a[2]、a[3] 线性关系: a1 a2 a3 a4 数组下标大小 顺序存储的线性表 1.1.1、定义 元素类型 线性表名称[ 线性表长度 ] 例 int data[ max_length ]; 以 a0开始的线性表-- a0 、a1、a2、a3…… a i data[ i ] 以a1开始的线性表-- a1、a2、a3、a4…… data[ i – 1 ] a i 顺序存储的线性表 更进一步的定义(Advanced) type

文档评论(0)

1亿VIP精品文档

相关文档