第二章+线性表.ppt
《第二章+线性表.ppt》由会员分享,可在线阅读,更多相关《第二章+线性表.ppt(110页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章第二章线性表线性表 2.1 2.1 2.1 2.1 线性表的类型定义线性表的类型定义线性表的类型定义线性表的类型定义 2.2 2.2 2.2 2.2 线性表的顺序表示和实现线性表的顺序表示和实现线性表的顺序表示和实现线性表的顺序表示和实现 2.3 2.3 2.3 2.3 线性表的链式表示和实现线性表的链式表示和实现线性表的链式表示和实现线性表的链式表示和实现 2.4 2.4 2.4 2.4 线性表的应用线性表的应用线性表的应用线性表的应用2.1线性表的类型定义线性表的类型定义线性结构的线性结构的基本特征基本特征:n n 集合中必存在唯一的一个集合中必存在唯一的一个集合中必存在唯一的一个集
2、合中必存在唯一的一个“第一元素第一元素第一元素第一元素”;n n 集合中必存在唯一的一个集合中必存在唯一的一个集合中必存在唯一的一个集合中必存在唯一的一个“最后元素最后元素最后元素最后元素”;n n 除最后元素之外,均有唯一的除最后元素之外,均有唯一的除最后元素之外,均有唯一的除最后元素之外,均有唯一的后继后继后继后继;n n 除第一元素之外,均有唯一的除第一元素之外,均有唯一的除第一元素之外,均有唯一的除第一元素之外,均有唯一的前驱前驱前驱前驱。从逻辑上:数据之间的关系可以分从逻辑上:数据之间的关系可以分从逻辑上:数据之间的关系可以分从逻辑上:数据之间的关系可以分4 4类类类类:线性结构线性
3、结构线性结构线性结构,树型结构树型结构树型结构树型结构,图状结构图状结构图状结构图状结构,集合集合集合集合n n线性表最简单的一种线性结构线性表最简单的一种线性结构线性表最简单的一种线性结构线性表最简单的一种线性结构n n一个线性表是一个线性表是一个线性表是一个线性表是n n个数据元素的有限序列个数据元素的有限序列个数据元素的有限序列个数据元素的有限序列n n比如比如比如比如 ABZABZ英文字母表英文字母表英文字母表英文字母表n n比如比如比如比如001高等数学华罗庚S01002线性代数銮汝书L01003高等数学郑杭生 S01004离散数学耿素云S02线性表中每个数据元素的具体含义,各不相同
4、,数据元素是基线性表中每个数据元素的具体含义,各不相同,数据元素是基线性表中每个数据元素的具体含义,各不相同,数据元素是基线性表中每个数据元素的具体含义,各不相同,数据元素是基本单位,一个数据元素由若干个数据项组成本单位,一个数据元素由若干个数据项组成本单位,一个数据元素由若干个数据项组成本单位,一个数据元素由若干个数据项组成2.1线性表的类型定义线性表的类型定义n n线性表记为线性表记为线性表记为线性表记为(a a1 1,a ai i-1-1,a ai i,a ai i+1+1,a an n)n na ai-1i-1 在在在在a ai i 之前之前之前之前 称称称称 a ai i-1-1是是
5、是是 a ai i 的的的的 前驱前驱前驱前驱n na ai i 在在在在 a ai i-1-1之后之后之后之后 称称称称 a ai i 是是是是 a ai i-1-1的的的的 后继后继后继后继n n序列中数据元素的个数序列中数据元素的个数序列中数据元素的个数序列中数据元素的个数 n n 定义为线性表的表长定义为线性表的表长定义为线性表的表长定义为线性表的表长 n n称称称称 i i 为为为为a ai i在线性表中的位序在线性表中的位序在线性表中的位序在线性表中的位序 n n i i=2=2,,n nn n线性表的元素个数称为的线性表的元素个数称为的线性表的元素个数称为的线性表的元素个数称为的
6、表长表长表长表长,n n0 0时称为时称为时称为时称为空表空表空表空表2.1线性表的类型定义线性表的类型定义线性表的抽象数据类型线性表的抽象数据类型(ADT)(ADT)定义如下:定义如下:ADTADT ListList数据对象数据对象数据对象数据对象:D=aD=ai i|a|ai i ElemSetElemSet,i=1,2,.,n,n0,i=1,2,.,n,n0 数据关系数据关系数据关系数据关系:R1=aR1=|a|ai-1i-1,a ai iD D,i=2,.,n,i=2,.,n /表示为相邻元素的有序对表示为相邻元素的有序对表示为相邻元素的有序对表示为相邻元素的有序对基本操作基本操作基本
7、操作基本操作:InitListInitList(&L)(&L)操作结果:构造一个空的线性表操作结果:构造一个空的线性表操作结果:构造一个空的线性表操作结果:构造一个空的线性表L L。DestroyListDestroyList(&L)(&L)初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在。已存在。已存在。已存在。操作结果:销毁线性表操作结果:销毁线性表操作结果:销毁线性表操作结果:销毁线性表L L,将原表中各结点所,将原表中各结点所,将原表中各结点所,将原表中各结点所占的内存空间释放。占的内存空间释放。占的内存空间释放。占的内存空间释放。引用型操作ListEmpt
8、yListEmpty(L)(L)初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在。已存在。已存在。已存在。操作结果:若操作结果:若操作结果:若操作结果:若L L为空表,则返回为空表,则返回为空表,则返回为空表,则返回TRUETRUE,否则,否则,否则,否则FALSEFALSE。ListLengthListLength(L)(L)初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在。已存在。已存在。已存在。操作结果:返回操作结果:返回操作结果:返回操作结果:返回L L中元素个数中元素个数中元素个数中元素个数。PriorElemPriorElem
9、(L,(L,cur_ecur_e,&,&pre_epre_e)初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在。已存在。已存在。已存在。操作结果:若操作结果:若操作结果:若操作结果:若cur_ecur_e是是是是L L的元素,但不是第一个,则用的元素,但不是第一个,则用的元素,但不是第一个,则用的元素,但不是第一个,则用pre_epre_e 返回它的前驱,否则操作失败,返回它的前驱,否则操作失败,返回它的前驱,否则操作失败,返回它的前驱,否则操作失败,pre_epre_e无定义。无定义。无定义。无定义。NextElemNextElem(L,(L,cur_ecur_e
10、,&,&next_enext_e)初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在。已存在。已存在。已存在。操作结果:若操作结果:若操作结果:若操作结果:若cur_ecur_e是是是是L L的元素,但不是最后一个,则用的元素,但不是最后一个,则用的元素,但不是最后一个,则用的元素,但不是最后一个,则用next_enext_e返回它的后继,否则操作失败,返回它的后继,否则操作失败,返回它的后继,否则操作失败,返回它的后继,否则操作失败,next_enext_e无定义无定义无定义无定义。LocateElemLocateElem(L,e,compare()(L,e,com
11、pare()初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在,已存在,已存在,已存在,compare()compare()是元素判定函数。是元素判定函数。是元素判定函数。是元素判定函数。操作结果:返回操作结果:返回操作结果:返回操作结果:返回L L中第中第中第中第1 1个与个与个与个与e e满足关系满足关系满足关系满足关系compare()compare()的元素的的元素的的元素的的元素的位序。若这样的元素不存在,则返回值为位序。若这样的元素不存在,则返回值为位序。若这样的元素不存在,则返回值为位序。若这样的元素不存在,则返回值为0 0。ListTraverse(L
12、ListTraverse(L,visit(),visit()初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在。已存在。已存在。已存在。操作结果:依次对操作结果:依次对操作结果:依次对操作结果:依次对L L的每个元素调用函数的每个元素调用函数的每个元素调用函数的每个元素调用函数visit()visit()。一旦。一旦。一旦。一旦visit()visit()失败,则操作失败。失败,则操作失败。失败,则操作失败。失败,则操作失败。GetElemGetElem(L,i,&e)(L,i,&e)初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在,已存在
13、,已存在,已存在,1iLengthList(L)1iLengthList(L)操作结果:用操作结果:用操作结果:用操作结果:用e e返回返回返回返回L L中第中第中第中第i i个元素的值。个元素的值。个元素的值。个元素的值。PutElemPutElem(&L,i,e)(&L,i,e)初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在,已存在,已存在,已存在,1iLengthList(L)1iLengthList(L)操作结果:操作结果:操作结果:操作结果:L L中第中第中第中第i i个元素赋个元素赋个元素赋个元素赋e e的值。的值。的值。的值。ListDelete(&
14、LListDelete(&L,i,&e),i,&e)初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在且非空,已存在且非空,已存在且非空,已存在且非空,1iLengthList(L)1iLengthList(L)操作结果:删除操作结果:删除操作结果:删除操作结果:删除L L的第的第的第的第i i个元素,并用个元素,并用个元素,并用个元素,并用e e返回其值,返回其值,返回其值,返回其值,L L的长度减的长度减的长度减的长度减1 1。ListInsertListInsert(&L,i,e)(&L,i,e)初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L
15、 L已存在,已存在,已存在,已存在,1iLengthList(L)+11iLengthList(L)+1操作结果:在操作结果:在操作结果:在操作结果:在L L的第的第的第的第i i个元素之前插入新的元素个元素之前插入新的元素个元素之前插入新的元素个元素之前插入新的元素e e,L L的长度增的长度增的长度增的长度增1 1。ADT List ADT ListClearListClearList(&L)(&L)初始条件:线性表初始条件:线性表初始条件:线性表初始条件:线性表L L已存在。已存在。已存在。已存在。操作结果:将操作结果:将操作结果:将操作结果:将L L重置为空表。重置为空表。重置为空表。
16、重置为空表。加工型操作 算法2.1利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=AB。void union(List&La,List Lb)La_len=ListLength(La);Lb_len=ListLength(Lb);for(i=1;i=lb_len;i+)GetElem(lb,i,e);if(!LocateElem(la,e,equal)ListInsert(la,+la_en,e)时间复杂度O(ListLength(La)ListLength(Lb)算法2.2巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表L
17、C,且LC中的元素仍按值非递减有序排列。此问题的算法如下:void mergelist(List la,List lb,List&lc)InitList(lc);i=j=1;k=0;la-len=ListLength(la);lb-len=ListLength(lb);while(i=la-len)&(j=lb-len)GetElem(la,i,ai);GetElem(lb,j,bj);if(ai=bj)ListInsert(lc,+k,ai);+i;else ListInsert(lc,+k,bj);+j;while(i=la-len)GetElem(la,i+,ai);ListInsert
18、(lc,+k,ai);while(j=lb-len)GetElem(lb,j+,bj);ListInsert(lc,+k,bj);时间复杂度O(ListLength(La)+ListLength(Lb)思考1已知一个已知一个“非纯集合非纯集合”B,试构造一个集合,试构造一个集合A,使,使A中只包含中只包含B中所有值各不相同的数据元素。中所有值各不相同的数据元素。分析分析:将每个从将每个从B中取出的元素和已经加入到集合中取出的元素和已经加入到集合A中中的元素相比较。的元素相比较。void purge(List&LA,List LB)/构造线性表LA,使其只包含LB中所有值不相同的数据元素,算法不
19、改变线性表LBInitList(LA);/创建一个空的线性表 LALa_len=0;Lb_len=ListLength(LB);/求线性表 LB 的长度for(i=1;i=Lb_len;i+)/处理 LB 中每个元素GetElem(LB,i,e);/取LB中第 i 个数据赋给 e /当 LA 中没有和 e 值相同的数据元素时进行插入 if(!LocateElem(LA,e,equal()ListInsert(LA,+La_len,e);/for/purge思考2判别两个集合是否相等。判别两个集合是否相等。分析分析:首先判别两者的表长是否相等;在表长首先判别两者的表长是否相等;在表长相等的前提下
20、,对于一个表中的所有元素,是相等的前提下,对于一个表中的所有元素,是否都能在另一个表中找到和它相等的元素否都能在另一个表中找到和它相等的元素.如果如果集合集合中的元素中的元素不能保证都相异不能保证都相异,还应反过来判别还应反过来判别LB中每个元素都能在中每个元素都能在LA中中找到相同者。找到相同者。2.1 2.1 线性表的类型定义线性表的类型定义 2.2 2.2 线性表的顺序表示和实现线性表的顺序表示和实现 2.3 2.3 线性表的链式表示和实现线性表的链式表示和实现 2.4 2.4 线性表的应用线性表的应用2.2线性表的顺序表示和实现线性表的顺序表示和实现n n线性表的起始地址,称作线性表的
21、线性表的起始地址,称作线性表的线性表的起始地址,称作线性表的线性表的起始地址,称作线性表的基地址基地址基地址基地址n n特点特点特点特点:用一组:用一组:用一组:用一组 地址连续地址连续地址连续地址连续 的存储单的存储单的存储单的存储单元依次存放线性表中的数据元素元依次存放线性表中的数据元素元依次存放线性表中的数据元素元依次存放线性表中的数据元素以数组的方式存储线性表中的所有数据元素以数组的方式存储线性表中的所有数据元素以数组的方式存储线性表中的所有数据元素以数组的方式存储线性表中的所有数据元素顺序表顺序表顺序表顺序表线性表:(线性表:(线性表:(线性表:(3,9,6,8,1,73,9,6,8
22、,1,7)顺序存储顺序存储顺序存储顺序存储1 13 32 2i-1i-1i iC C以以以以“存储位置相邻存储位置相邻存储位置相邻存储位置相邻”表示有序对表示有序对表示有序对表示有序对a即:即:即:即:loc(aloc(ai i)=loc(a)=loc(ai-1i-1)+C)+C loc(aloc(ai i)=loc(a)=loc(a1 1)+(i-1)*C)+(i-1)*C其中其中其中其中 C C 为每个数组元素的大小为每个数组元素的大小为每个数组元素的大小为每个数组元素的大小2.2线性表的顺序表示和实现线性表的顺序表示和实现例:有一线性表(例:有一线性表(例:有一线性表(例:有一线性表(a
23、,b,c,d,ea,b,c,d,ea,b,c,d,ea,b,c,d,e,,x,y,zx,y,zx,y,zx,y,z),用),用),用),用顺序存储的方式存储该线性表,如已知线性表的顺序存储的方式存储该线性表,如已知线性表的顺序存储的方式存储该线性表,如已知线性表的顺序存储的方式存储该线性表,如已知线性表的基地址为基地址为基地址为基地址为200200200200,请问,请问,请问,请问h h h h的存储地址?的存储地址?的存储地址?的存储地址?207207顺序存储结构的特点(1)利用数据元素的存储位置表示线性表中相邻数据元素之间的前后关系,即线性表的逻辑结构与存储结构(物理结构)一致(2)在访
24、问线性表时,可以利用上述给出的数学公式,快速地计算出任何一个数据元素的存储地址。p用用C语言描述顺序映像的线性表语言描述顺序映像的线性表#definedefine LIST_INIT_SIZELIST_INIT_SIZE 8080/线性表存储空间的初始分配量线性表存储空间的初始分配量#define#define LISTINCREMENTLISTINCREMENT 1010/线性表存储空间的分配增量线性表存储空间的分配增量LelemLength 3Listsize 8661583typedeftypedef structstruct ElemTypeElemType *elemelem;/存储
25、空间基址存储空间基址intint length;length;/当前长度当前长度intint listsizelistsize;/当前分配的存储容当前分配的存储容量量 SqListSqList;/俗称俗称 顺序表顺序表sequence list2.2线性表的顺序表示和实现线性表的顺序表示和实现typedeftypedef?ElemTypeElemType;/根据实际需要定义根据实际需要定义InitList_SqInitList_Sq (SqListSqList&L)&L)DestroyList_SqDestroyList_Sq(SqList(SqList&L)&L)ListLength_SqL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 线性
限制150内