数据结构教学课件作者李学刚电子课件源代码单元2线性表幻灯片.ppt

数据结构教学课件作者李学刚电子课件源代码单元2线性表幻灯片.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * 【课堂实践2-3】 编写一个算法,在带头结点的双向链表中,将值为x的新结点插入结点*p之后,设p≠NULL。 做 一 做 2.5 线性表的应用 【例2-2】 顺序表的划分 将顺序表(a1,a2, …,an)重新排列为以a1为界的两部分:a1前面的值都比a1小,a1后面的值都比a1大(假设数据元素的类型具有可比性,不妨设为int类型),这一操作称为划分,a1称为基准。 基本思想:从第二个元素开始到最后一个元素,逐一向后扫描。 ①当前数据元素ai比a1大时,表明它已经在a1的后面,不必改变它与a1之间的位置,继续比较下一个; ②当前数据元素ai比a1小时,表明它应该在a1的前面,此时将它上面的元素都依次向下移动一个位置,然后将它置入最上方。 划分过程: 下面通过具体实例说明顺序表的划分过程,图中带下划线的数据表示是基准元素和当前与基准比较的元素,带底纹的元素为已扫描比较过的元素,见图2-26。 顺序表的划分算法: 25 30 20 60 10 35 15 … 原顺序表 25 30 20 60 10 35 15 … 第一步比较后 20 25 30 60 10 35 15 … 第二步比较后 20 25 30 60 10 35 15 … 第三步比较后 10 20 25 30 60 35 15 … 第四步比较后 10 20 25 30 60 35 15 … 第五步比较后 15 10 20 25 30 60 35 … 第六步比较后 图2-26 划分过程 划分算法 void Part(SeqList *L) { int i,j; DataType x,y;//用于存放基准和当前小于基准的结点 x=L-data[0];//将基准置入x中 for(i=1;iL-length;i++) if(L-data[i]x) { y=L-data[i]; //将当前小于基准的置入y for(j=i-1;j=0;j--) L-data[j+1]= L-data[j]; L-data[0]=y; } } 【例2-3】 有序顺序表的合并 有顺序表A和B,其元素均按由小到大的升序排列。编写一个算法将它们合并成一个顺序表C,要求C的元素也是由小到大的升序排列。 基本思想: 均从第一个元素开始依次扫描A和B,并进行比较,将较小的元素赋给C,直到其中的一个顺序表扫描完毕,然后将另一个顺序表中的剩余元素赋给C即可。C的容量应能够容纳A、B两个顺序表的所有元素。 合并过程: 下面通过具体实例说明顺序表的合并过程,图中带底纹的元素为已排好序的元素,见图2-27。 顺序表的合并算法: 8 10 12 15 18 20 30 33 C 最后合并后 8 10 20 原顺序表 12 15 18 30 33 A B 8 C 第一次合并后 8 10 C 第二次合并后 8 10 12 C 第三次合并后 8 10 12 15 C 第四次合并后 8 10 12 15 18 C 第五次合并后 8 10 12 15 18 20 C 第六次合并后 图2-27 合并过程 合并算法 void Merge(SeqList A, SeqList B,SeqList *C) { int i,j,k; i=0;j=0;k=0; while(iA.lengthjB.length) { if(A.data[i]B.data[j]) C- data[k++]=A.data[i++]; else C- data[k++]=B.data[j++]; } while(iA.length) C- data[k++]=A.data[i++]; while(jB.length) C- data[k++]=B.data[j++]; C-length=k; } 引例分析与实现 1.引例分析 由于22选5的一张体育彩票是由01~22共22个号码中随机选取5个号码生成,所以应该建立一个存放这22个号码的表,我们把这个表就称为备选号码表。因为需要从备选号码表中随机取5个号码构成彩票的一注,即需要随机存取01~22中的号码,而且每个号码的类型都相同(这里都是int类型),号码的个数最多为22,所以备选号码表采用顺序表的存储结构最为合适。 另外,从备选号码表中随机取5个号码构成彩票的一注的5个号码需存放在一个表中,我们把这个表称为彩票号码表;每期开奖时从22个号码中摇出5个号码,该5个号码为当期开奖号码,我们把开奖号码存放在一个表中,这个表称为开奖号码表;当查询某注号码是否中奖时,需要输入号码存

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档