数据结构与算法-第三章 线性表.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章 线性表 3.1 线性表及逻辑结构 3.2 线性表的顺序存储 3.3 线性表的链式存储 3.4 链式存储结构的应用 3.1 线性表及逻辑结构 线性表(Linear List):由n(n0)个性质相同的数据元素组成的有限序列。线性表的长度即为线性表中元素的个数n(?0),当n=0时,称该线性表为空表。 线性表举例: 英文字母表:(A, B, C,······, Z) 我国有34个省、市、自治区,组成一个线性表如下: (北京, 天津, 上海,······, 宁夏, 台湾) 线性表的有关概念 位序:在一个非空表 (a1 ,a2 ,…,ai,…,an-1 ,an) 中的每个数据元素都有一个确定的位置,如a1是第一个数据元素,an是最后一个数据元素,ai是第i个数据元素,称i为数据元素ai在线性表中的位序。 前驱/后继元素:若将线性表记为:(a1, ..., ai-1 , ai , ai+1 , ..., an ),则表中ai-1先于ai,ai先于ai+1,就称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。 注意: 除第一个元素a1元素以外,每一个数据元素有且仅有一个前趋元素, 除最后一个元素以外,每个数据元素有且仅有一 个后继元素。 有关线性表运算: 初始化InitList(L):创建一个空的线性表L。 计数ListLength(L):求线性表L的长度。 存取GetElem(L,i):存取第i个数据元素。 插入ListInsert(L,i):在第i个数据元素之前,插入一个新的数据元素;或在第i个元素后,插入一个新的数据元素。 删除ListDelete(L,i):删去第i个数据元素。 归并:把两个或两个以上的线性表合并在一起,形成一个新的线性表。 分拆:把一个线性表拆成两个或多个线性表。 查找:按某个特定的值查找线性表中的某个元素。 排序:对线性表中的某个元素按某个数据项的值递增(或递减)的顺序进行重新排序。 例 3-1 根据实例给出线性表归并的算法 已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC←LA∪LB,且LC中的数据元素仍按值非递减有序排列。设 LA=(1,5,7,15) LB=(3,6,8,9,13,15,17) 则 LC=(1,3,5,6,7,8,9,13,15,15,17) 算法思想: 设LC为空表 将LA或LB中的元素逐个插入到LC中即可 具体方法:为使LC中元素按值非递减有序排列,可设两个指针i和j分别指向LA和LB中某个元素,若设i当前所指的元素为a,j当前所指的元素为b,则当前应插入到LC中的元素c为 算法3.1 归并算法 Void MergeList(List *La, List *Lb, List *LC) { InitList(Lc); /*构造一个空的线性表Lc*/ i=j=1;k=0; /*指针i和j初始值为1*/ La_len=ListLength(La); Lb_len=ListLength(Lb); while((i=La_len)&&(j<=Lb_1en) { /* La和Lb均非空*/ GetElem(La,i,ai); GetElem(Lb,j,bj); if (ai <bj) { Listlnsert(Lc,++k,ai); ++i; } /*将La中的元素插入到表Lc中*/ else if (ai = bj ) { Listlnsert(Lc,++k,bj);++i;++j;} else { Listlnsert(Lc,++k,bj);++j;} } While(i =La_len) { /*如果表La没有取完,则将表La中的所剩元素插入到表lc中*/ GetElem(La,i++,ai); Listlnsert(Lc,++k,ai); } While(j<=Lb_len) { GetElem(Lb,j++,bj); Listlnsert(Lc,++k,bj); } }/*MergeList*/ 例3-2 利用线性表的基本运算来实现清除线性表LA中多余的重复结点,生成一个新的表LB。如有以下表,LA=(2,3,4,3,5,6,7,4,8,9)存在多余的重复结点,则LB=(2,3,4,5,6,7,8,9) 算法

文档评论(0)

小白兔 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档