- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构线性表
第1讲 线性表
本章主要掌握如下内容:
线性表的定义和基本操作,线性表的实现,线性表的顺序存储结构及链式存储结构,线性表的应用。
知识点分析
(一)线性表的定义和基本操作
1.线性表基本概念
1)定义:是由相同类型的结点组成的有限序列。如:由n个结点组成的线性表
( a1, a2, …, an)
a1是最前结点,an是最后结点。结点也称为数据元素或者记录。
2)线性表的长度:线性表中结点的个数称为其长度。长度为0的线性表称为空表。
3)结点之间的关系:设线性表记为(a1,a2,…ai-1 , ai, ai+1 ,…an),称ai-1是ai的直接前驱结点(简称前驱),ai+1是ai的直接后继结点(简称后继)。
4)线性表的性质:
① 线性表结点间的相对位置是固定的,结点间的关系由结点在表中的位置确定。
② 如果两个线性表有相同的数据结点,但它们的结点顺序不一致,该两个线性表也是不相等的。
注意:线性表中结点的类型可以是任何数据(包括简单类型和复杂类型),即结点可以有多个成分,其中能唯一标识表元的成分称为关键字(key),或简称键。以后的讨论都只考虑键,而忽略其它成分,这样有利于把握主要问题,便于理解。
『经典例题解析』
线性表的特点是每个元素都有一个前驱和一个后继。( )
【答案】错误。
【解析】线性表的第一个数据元素没有前驱,最后一个元素没有后继。其余的所有元素都有一个前驱和后继。
2.线性表的抽象数据类型
线性表是一个相当灵活的数据结构,其长度可以根据需要增加或减少。从操作上讲,用户不仅可以对线性表的数据元素进行访问操作,还可以进行插入、删除、定位等操作。
1)线性表的基本操作
假设线性表L有
数据对象 D={ai | ai∈ElemSet,i=1,2,3,…,n,n=0},
数据元素之间的关系R={ai-1,ai|ai-1,ai∈D,i=1,2,…,n},
则线性表L的基本操作如下所示:
InitList(L):其作用是构造一个长度为0的线性表(空线性表);
DestoryList(L):其作用是销毁当前的线性表L;
ClearList(L):清空线性表L,使之成为空表;
ListLength(L):返回线性表L的长度,即线性表中数据元素的个数;
ListEmpty(L) :判断线性表L是否为空表,是则返回True,否则返回False;
GetElem(L,i,e):将线性表L中第i个数据元素的值返回到变量e中;
LocateELem(L,e,compare( )) :判断线性表L中是否存在与e满足compare()条件的数据元素,有则返回第一个数据元素;
PriorElem(L,cur_e,pri_e):返回线性表L中数据元素cur_e的前驱结点;
NextElem(L,cur_e,next_e):返回线性表L中数据元素cur_e的后继结点;
ListInsert(L,i,e):向线性表L的第i个位置之前插入一个数据元素,其值为e;
ListDelete(L,i,e):删除线性表L的第i个数据元素,并将该数据元素的值返回到e中;
ListTraverse(L,visit()):遍历线性表中的每个数据元素。
2)线性表的操作举例
① 用两个线性表La,Lb分别表示两个集合A、B,现要求两个集合的合集,使得A=AUB。操作如下:依次取出Lb中的元素,然后到La中去找,如果找不到,则将该元素加入La中,同时修改La的长度,如果Lb中的元素同La中的元素相同,那么按照集合的概念,不再加入到La中。算法描述为:
Void union(List La , List Lb)
{ La_len = length(La) ; Lb_len=length(Lb) ;
for (i = 1 ; i = Lb_len ; i++)
{ GetElem(Lb,i,e) ; //取出Lb的第i个元素,并将之赋值给e
if (!LocateElem(La,e,equal))
ListInsert(La,++La_len ,e) ;
}
}
② 有序线性表合并问题:利用抽象数据类型实现两个线性表的合并
已知线性表La和Lb中的数据元素按照非递减有序排列,现在要求La和Lb归并为一个新的有序线性表Lc,使得Lc
文档评论(0)