数据结构-2-线性表.ppt
《数据结构-2-线性表.ppt》由会员分享,可在线阅读,更多相关《数据结构-2-线性表.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2章 线性表 2.1 线性表的类型定义2.2 线性表的顺序表示和实现2.3 线性表的链式表示和实现2.4 一元多项式的表示及相加2.1 线性表的类型定义n n线性结构的特点:线性结构的特点:在数据元素的非空有限集中,在数据元素的非空有限集中,1)有且)有且仅有一个开始结点;仅有一个开始结点;2)有且仅有一个终端结)有且仅有一个终端结点;点;3)除第一个结点外,集合中的每个数据)除第一个结点外,集合中的每个数据元素均有且只有一个前驱;元素均有且只有一个前驱;4)除最后一个结)除最后一个结点外,集合中的每个数据元素均有且只有一点外,集合中的每个数据元素均有且只有一个后继。个后继。n n线性序列:
2、线性结构中的所有结点按其关系线性序列:线性结构中的所有结点按其关系可以排成一个序列,记为可以排成一个序列,记为(a1,ai,ai+1,an)2.1 线性表的类型定义1.1.线性表线性表线性表线性表 1 1)线性表是)线性表是)线性表是)线性表是n(n 0)n(n 0)个数据元素的有限序列。个数据元素的有限序列。个数据元素的有限序列。个数据元素的有限序列。2 2)线性表是一种最常用且最简单的数据结构。)线性表是一种最常用且最简单的数据结构。)线性表是一种最常用且最简单的数据结构。)线性表是一种最常用且最简单的数据结构。含有含有含有含有n n个数据元素的线性表是一个数据结构:个数据元素的线性表是一
3、个数据结构:个数据元素的线性表是一个数据结构:个数据元素的线性表是一个数据结构:List=(D,R)List=(D,R)其中:其中:其中:其中:D=D=a ai i|a|ai iD D0 0,i=1,2,n,n0,i=1,2,n,n0 R=N,N=a R=N,N=|a|ai-1i-1,a ai i D D0 0,i=2,3,n,i=2,3,n D D0 0 为某个数据对象为某个数据对象为某个数据对象为某个数据对象数据的子集数据的子集数据的子集数据的子集uu特性:均匀性,有序性(线性序列关系)特性:均匀性,有序性(线性序列关系)特性:均匀性,有序性(线性序列关系)特性:均匀性,有序性(线性序列关
4、系)2.1 线性表的类型定义1.1.线性表线性表线性表线性表 3 3)线性表的长度及空表)线性表的长度及空表)线性表的长度及空表)线性表的长度及空表uu线性表中数据元素的个数线性表中数据元素的个数线性表中数据元素的个数线性表中数据元素的个数n n(n0n0)定义为线性表的长度定义为线性表的长度定义为线性表的长度定义为线性表的长度uu当线性表的长度为当线性表的长度为当线性表的长度为当线性表的长度为0 0 时,称为空表。时,称为空表。时,称为空表。时,称为空表。uu a ai i 是第是第是第是第i i个数据元素,称个数据元素,称个数据元素,称个数据元素,称i i为为为为a ai i 在线性表中的
5、位序。在线性表中的位序。在线性表中的位序。在线性表中的位序。2.线性表的基本操作 p19p201 1)InitListInitList(&L)(&L)初始化,构造一个空的线性表初始化,构造一个空的线性表2 2)ListLengthListLength(L)(L)求长度求长度,返回线性表中数据元返回线性表中数据元素个数素个数3 3)GetElemGetElem(L,i,&e)(L,i,&e)取表取表L L中第中第i i个数据元素赋值个数据元素赋值给给e e4 4)LocateElemLocateElem(L,e)(L,e)按值查找,若表中存在一按值查找,若表中存在一个或多个值为个或多个值为e e
6、的结点,返回第一个找到的数的结点,返回第一个找到的数据元素的位序,否则返回一个特殊值。据元素的位序,否则返回一个特殊值。5 5)ListInsertListInsert(&L,i,e)(&L,i,e)在在L L中第中第i i个位置前插入新个位置前插入新的数据元素的数据元素e e,表长加表长加1 1。6 6)ListDeleteListDelete(&L,i,e)(&L,i,e)删除表中第删除表中第i i个数据元素,个数据元素,e e返回其值,表长减返回其值,表长减1 1。线性表的基本操作举例n n例2-1 求A=A B P20算法2.1uu时间复杂度:LocateElem()执行次数 O(Li
7、stLength(A)*ListLength(B)n n例2-2 合并LA 和 LB 到LC中 P20-21算法2.2uu时间复杂度:ListInsert()执行次数O(ListLength(LA)+ListLength(LB)2.2 线性表的顺序表示和实现 1.顺序表线性表的顺序存储结构1 1)在计算机内存中用一组地址连续的存储单元依次)在计算机内存中用一组地址连续的存储单元依次 存储线性表中的各个数据元素。存储线性表中的各个数据元素。2 2)假设线性表的每个元素需占用)假设线性表的每个元素需占用L L个存储单元,并以个存储单元,并以所占的第一个单元的存储地址作为数据元素的起始存所占的第一个
8、单元的存储地址作为数据元素的起始存储位置,则线性表中第储位置,则线性表中第i+1i+1个数据元素的存储位置个数据元素的存储位置LocLoc(a(ai+1i+1)和第和第i i个数据元素的存储位置个数据元素的存储位置Loc(Loc(a ai i)之间满足下之间满足下列关系:列关系:Loc(aLoc(ai+1i+1)=Loc()=Loc(a ai i)+L)+L 一般来说,线性表的第一般来说,线性表的第i i个元素个元素a ai i的存储位置为:的存储位置为:Loc(Loc(a ai i)=Loc(a)=Loc(a1 1)+(i-1)*L)+(i-1)*L 其中其中Loc(aLoc(a1 1)是线
9、性表的第一个数据元素是线性表的第一个数据元素a a1 1的存储位置,的存储位置,通常称作线性表的通常称作线性表的起始位置起始位置起始位置起始位置或或基地址基地址基地址基地址。1.顺序表线性表的顺序存储结构3 3)线性表的顺序存储结构示意图)线性表的顺序存储结构示意图p22p22图图2.2.2 2n n用用“物理位置物理位置”相邻来表示线性表中数据元素之间相邻来表示线性表中数据元素之间的逻辑关系。的逻辑关系。n n根据线性表的顺序存储结构的特点,只要确定了存根据线性表的顺序存储结构的特点,只要确定了存储线性表的起始位置,线性表中任一数据元素都可储线性表的起始位置,线性表中任一数据元素都可随机存取
10、,所以,线性表的顺序存储结构是一种随机存取,所以,线性表的顺序存储结构是一种随随随随机存取机存取机存取机存取的存储结构。的存储结构。#define LIST_MAX_LENTH 100/define LIST_MAX_LENTH 100/define LIST_MAX_LENTH 100/define LIST_MAX_LENTH 100/或者或者或者或者N/N/N/N/或者是一或者是一或者是一或者是一 个个个个 常数常数常数常数typedef struct ElemTypetypedef struct ElemTypetypedef struct ElemTypetypedef struct
11、 ElemType int int int int *elemelemelemelem;int int int int length;length;length;length;SqList SqList SqList SqList;SqList SqList SqList SqList L;L;L;L;2.顺序存储线性表的描述v C语言中静态分配描述求置空表Status Status ClearListClearList(&L)(&L)L.length=0;L.length=0;return OK;return OK;2.顺序存储线性表的描述求长度Status List length(Stat
12、us List length(SqList SqList L)L)length=L.length;length=L.length;return OK;return OK;2.顺序存储线性表的描述初始化Status Status Status Status InitListInitListInitListInitList_ _ _ _ SqListSqListSqListSqList(SqList SqList SqList SqList L)L)L)L)L.L.L.L.elemelemelemelem=(*=(*=(*=(*intintintint)malloc malloc malloc m
13、alloc(LIST_MAX_LENGTH(LIST_MAX_LENGTH(LIST_MAX_LENGTH(LIST_MAX_LENGTH *sizeofsizeofsizeofsizeof(intintintint););););if(!L.if(!L.if(!L.if(!L.elemelemelemelem)exit(Overflow);)exit(Overflow);)exit(Overflow);)exit(Overflow);L.length=0;L.length=0;L.length=0;L.length=0;return OK;return OK;return OK;return
14、 OK;2.顺序存储线性表的描述2.顺序表的描述1)C语言中动态分配描述#define LIST_INIT_SIZE 100define LIST_INIT_SIZE 100define LIST_INIT_SIZE 100define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define LISTINCREMENT 10#define LISTINCREMENT 10#define LISTINCREMENT 10typedef structtypedef structtypedef structtypedef struct ElemType E
15、lemType ElemType ElemType *elemelemelemelem;int int int int length;length;length;length;int listsizeint listsizeint listsizeint listsize;SqListSqListSqListSqList;SqList SqList SqList SqList L;L;L;L;n n说明:说明:elemelemelemelem数组指针指向线性表的基地址;数组指针指向线性表的基地址;lengthlengthlengthlength指示线性指示线性表的当前长度;表的当前长度;lis
16、tsizelistsizelistsizelistsize指示顺序表当前分配的存储空间大指示顺序表当前分配的存储空间大小。当空间不足时,再分配的存储空间增量为小。当空间不足时,再分配的存储空间增量为 LISTINCREMENT*LISTINCREMENT*LISTINCREMENT*LISTINCREMENT*sizeofsizeofsizeofsizeof(ElemTypeElemTypeElemTypeElemType)2)几个基本操作初始化n np23算法2.3 Status Status Status Status InitListInitListInitListInitList_ _
17、 _ _SqListSqListSqListSqList(SqListSqListSqListSqList&L)&L)&L)&L)L.L.L.L.elemelemelemelem=(=(=(=(ElemTypeElemTypeElemTypeElemType*)*)*)*)mallocmallocmallocmalloc(LIST_INIT_SIZE(LIST_INIT_SIZE(LIST_INIT_SIZE(LIST_INIT_SIZE *sizeofsizeofsizeofsizeof(ElemTypeElemTypeElemTypeElemType););););if(!L.if(!L.
18、if(!L.if(!L.elemelemelemelem)exit(OVERFLOW);)exit(OVERFLOW);)exit(OVERFLOW);)exit(OVERFLOW);L.length=0;L.length=0;L.length=0;L.length=0;L.L.L.L.listsizelistsizelistsizelistsize=LIST_INIT_SIZE;=LIST_INIT_SIZE;=LIST_INIT_SIZE;=LIST_INIT_SIZE;return OK;return OK;return OK;return OK;插入 p24算法2.4 Status S
19、tatus Status Status ListInsertListInsertListInsertListInsert_sq(_sq(_sq(_sq(SqListSqListSqListSqList&L,&L,&L,&L,intintintint i,i,i,i,ElemTypeElemTypeElemTypeElemType e)e)e)e)if(iL.length+1)return ERROR;if(iL.length+1)return ERROR;if(iL.length+1)return ERROR;if(iL.length+1)return ERROR;if(L.length=L.
20、if(L.length=L.if(L.length=L.if(L.length=L.listsizelistsizelistsizelistsize)newbasenewbasenewbasenewbase=(=(=(=(ElemTypeElemTypeElemTypeElemType*)*)*)*)reallocreallocreallocrealloc(L.(L.(L.(L.elemelemelemelem,(L.(L.(L.(L.listsizelistsizelistsizelistsize+LISTINCREMENT)*+LISTINCREMENT)*+LISTINCREMENT)*
21、+LISTINCREMENT)*sizeofsizeofsizeofsizeof(ElemTypeElemTypeElemTypeElemType););););if(!L.if(!L.if(!L.if(!L.elemelemelemelem)exit(OVERFLOW);)exit(OVERFLOW);)exit(OVERFLOW);)exit(OVERFLOW);L.L.L.L.elemelemelemelem=newbase newbase newbase newbase;L.L.L.L.listsizelistsizelistsizelistsize+=LISTINCREMENT;+=
22、LISTINCREMENT;+=LISTINCREMENT;+=LISTINCREMENT;n n需将第需将第n(n(即即L.length)L.length)至第至第i i个元素向后移动一个位置。个元素向后移动一个位置。注意:注意:C C语言中数组下标从语言中数组下标从0 0开始,则表中第开始,则表中第i i个数据个数据元素是元素是L.elemi-1L.elemi-1。插入 p24算法2.4 函数realloc的格式及功能格式:void*realloc(void*p,unsigned size)功能:将p所指向的已分配内存区域的大小 改为size。size可以比原来分配的空间大或小。插入(续)
23、q=&(L.elemi-1);q=&(L.elemi-1);q=&(L.elemi-1);q=&(L.elemi-1);for(p=&(L.elemL.length-1);p=q;-p)for(p=&(L.elemL.length-1);p=q;-p)for(p=&(L.elemL.length-1);p=q;-p)for(p=&(L.elemL.length-1);p=q;-p)*(p+1)=*p;*(p+1)=*p;*(p+1)=*p;*(p+1)=*p;*q=e;*q=e;*q=e;*q=e;+L.length;+L.length;+L.length;+L.length;return O
24、K;return OK;return OK;return OK;删除 p24p25算法2.5 Status Status Status Status ListDeleteListDeleteListDeleteListDelete_sq(_sq(_sq(_sq(SqListSqListSqListSqList&L,&L,&L,&L,intintintint i,i,i,i,ElemTypeElemTypeElemTypeElemType&e)&e)&e)&e)if(iL.length)return ERROR;if(iL.length)return ERROR;if(iL.length)ret
25、urn ERROR;if(iL.length)return ERROR;p=&(L.p=&(L.p=&(L.p=&(L.elemelemelemelemi-1);i-1);i-1);i-1);e=*p;e=*p;e=*p;e=*p;q=L.q=L.q=L.q=L.elemelemelemelem+length-1;/+length-1;/+length-1;/+length-1;/表尾表尾表尾表尾 for(+p;p=q;+p)*(p-1)=*p;for(+p;p=q;+p)*(p-1)=*p;for(+p;p=q;+p)*(p-1)=*p;for(+p;p=q;+p)*(p-1)=*p;-L.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性
限制150内