第二章数据结构教案优秀课件.ppt
《第二章数据结构教案优秀课件.ppt》由会员分享,可在线阅读,更多相关《第二章数据结构教案优秀课件.ppt(147页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章数据结构教案1第1页,本讲稿共147页第二章第二章 线性表线性表线性表是一种最简单的线性结构。线性表是一种最简单的线性结构。什么是线性结构?简单地说,线性结构是一什么是线性结构?简单地说,线性结构是一个数据元素的有序(次序)集合。它有四个基个数据元素的有序(次序)集合。它有四个基本特征:本特征:1集合中必存在唯一的一个集合中必存在唯一的一个第一元素第一元素;2集合中必存在唯一的一个集合中必存在唯一的一个最后元素最后元素;3除最后元素之外,其它数据元素均有唯一的除最后元素之外,其它数据元素均有唯一的后继后继;4除第一元素之外,其它数据元素均有唯一的除第一元素之外,其它数据元素均有唯一的前驱
2、前驱。第2页,本讲稿共147页2.1.1抽象数据类型线性表的定义抽象数据类型线性表的定义 通常可以下列通常可以下列n个数据元素的序列个数据元素的序列表示线性表表示线性表(Linear_List)(a1,a2,.,ai,.,an)序列中数据元素的个数序列中数据元素的个数n定义为线性表的表长;定义为线性表的表长;n=0时的线性表被称为时的线性表被称为空表空表。称。称i为为ai在线性表在线性表中的中的位序位序。第3页,本讲稿共147页2.1.1 抽象数据类型线性表的定义 其抽象数据类型的定义如下:其抽象数据类型的定义如下:ADTList数据对象:数据对象:Dai|aiElemSet,i=1,2,.,
3、n,n0数据关系:数据关系:R1|ai-1,aiD,i=2,.,n第4页,本讲稿共147页2.1.1 抽象数据类型线性表的定义 基本操作:基本操作:结构初始化结构初始化InitList(&L)操作结果:构造一个空的线性表操作结果:构造一个空的线性表L。销毁结构销毁结构DestroyList(&L)初始条件:线性表初始条件:线性表L已存在。已存在。操作结果:销毁线性表操作结果:销毁线性表L。第5页,本讲稿共147页2.1.1 抽象数据类型线性表的定义引用型操作引用型操作ListEmpty(L)初始条件:线性表初始条件:线性表L已存在。已存在。操作结果:若操作结果:若L为空表,则返回为空表,则返回
4、TRUE,否,否则返回则返回FALSE。ListLength(L)初始条件:线性表初始条件:线性表L已存在。已存在。操作结果:返回操作结果:返回L中元素个数。中元素个数。第6页,本讲稿共147页2.1.1 抽象数据类型线性表的定义 PriorElem(L,cur_e,&pre_e)初始条件:线性表初始条件:线性表L已存在。已存在。操作结果:若操作结果:若cur_e是是L中的数据元素,则用中的数据元素,则用pre_e返回它的前驱,否则操作失败,返回它的前驱,否则操作失败,pre_e无定义。无定义。NextElem(L,cur_e,&next_e)初始条件:线性表初始条件:线性表L已存在。已存在。
5、操作结果:若操作结果:若cur_e是是L中的数据元素,则用中的数据元素,则用ext_e返回它的后继,否则操作失败,返回它的后继,否则操作失败,next_e无定义无定义。第7页,本讲稿共147页2.1.1 抽象数据类型线性表的定义 GetElem(L,i,&e)初始条件:线性表初始条件:线性表L已存在,已存在,1iLengthList(L)。操作结果:用操作结果:用e返回返回L中第中第i个元素的值。个元素的值。LocateElem(L,e,compare()初始条件:线性表初始条件:线性表L已存在,已存在,compare()是元素判定函数。是元素判定函数。操作结果:返回操作结果:返回L中第中第1
6、个与个与e满足关系满足关系compare()的元的元素的位序。若这样的元素不存在,则返回值为素的位序。若这样的元素不存在,则返回值为0。第8页,本讲稿共147页2.1.1 抽象数据类型线性表的定义 ListTraverse(L,visit()初始条件:线性表初始条件:线性表L已存在,已存在,visit()为元素的访为元素的访问函数。问函数。操作结果:依次对操作结果:依次对L的每个元素调用函数的每个元素调用函数visit()。一旦一旦visit()失败,则操作失败。失败,则操作失败。第9页,本讲稿共147页2.1.1 抽象数据类型线性表的定义加工型操作加工型操作ClearList(&L)初始条件
7、:线性表初始条件:线性表L已存在。已存在。操作结果:将操作结果:将L重置为空表。重置为空表。PutElem(&L,i,e)初始条件:线性表初始条件:线性表L已存在,已存在,1iLengthList(L)。操作结果:操作结果:L中第中第i个元素赋值同个元素赋值同e的值。的值。第10页,本讲稿共147页2.1.1 抽象数据类型线性表的定义ListInsert(&L,i,e)初始条件:线性表初始条件:线性表L已存在,已存在,1iLengthList(L)+1。操作结果:在操作结果:在L的第的第i个元素之前插入新的元素个元素之前插入新的元素e,L的长度增的长度增1。ListDelete(&L,i,&e
8、)初始条件:线性表初始条件:线性表L已存在且非空,已存在且非空,1iLengthList(L)。操作结果:删除操作结果:删除L的第的第i个元素,并用个元素,并用e返回其值,返回其值,L的长度减的长度减1。ADTList第11页,本讲稿共147页2.1.2线性表类型的应用线性表类型的应用 如果已经实现了上述定义的线性表类型,那么如果已经实现了上述定义的线性表类型,那么在应用问题的求解中就可以利用类型中定义的各在应用问题的求解中就可以利用类型中定义的各种操作。下面将举几个例子说明之。种操作。下面将举几个例子说明之。例例2-1已知集合已知集合A和和B,求两个集合的并集,使,求两个集合的并集,使AAB
9、,且,且B不再单独存在。不再单独存在。第12页,本讲稿共147页2.1.2 线性表类型的应用 从集合的观点看,此问题求解的方法很简单,从集合的观点看,此问题求解的方法很简单,只要对集合只要对集合B中的所有元素一个一个地检查,看中的所有元素一个一个地检查,看看在集合看在集合A中是否存在相同元素,若不存在,则中是否存在相同元素,若不存在,则将该元素插入到集合将该元素插入到集合A,否则舍弃之。,否则舍弃之。要在计算机中求解,首先要确定要在计算机中求解,首先要确定如何表示集如何表示集合合。集合可以有多种表示方法,对上述集合求。集合可以有多种表示方法,对上述集合求并的问题可以用线性表表示集合。并的问题可
10、以用线性表表示集合。第13页,本讲稿共147页2.1.2 线性表类型的应用 现假设以线性表现假设以线性表LA和和LB分别表示集合分别表示集合A和和B,即构造两个线性表,即构造两个线性表LA和和LB,它们的数,它们的数据元素分别为集合据元素分别为集合A和和B中的成员。中的成员。由此,上述集合求并的问题便可演绎为:要求由此,上述集合求并的问题便可演绎为:要求对线性表作如下操作:对线性表作如下操作:扩大线性表扩大线性表 LA,将存在,将存在于线性表于线性表 LB 中而不存在于线性表中而不存在于线性表 LA 中的数据中的数据元素插入到线性表元素插入到线性表 LA 中去。中去。第14页,本讲稿共147页
11、2.1.2 线性表类型的应用具体操作步骤为:具体操作步骤为:1从线性表从线性表LB中取出一个数据元素;中取出一个数据元素;2依值在线性表依值在线性表LA中进行查询;中进行查询;3若不存在,则将它插入到若不存在,则将它插入到LA中。中。重复上述三步直至重复上述三步直至LB为空表止。为空表止。那么,其中的每一步能否利用上述线性表类型中那么,其中的每一步能否利用上述线性表类型中定义的基本操作来完成呢?定义的基本操作来完成呢?第15页,本讲稿共147页2.1.2 线性表类型的应用容易看出,上述的每一步恰好对应线性表的一个基容易看出,上述的每一步恰好对应线性表的一个基本操作:本操作:1.ListDele
12、te(LB,1,e);2.LocateElem(LA,e,equal();3.ListInsert(LA,n+1,e)第16页,本讲稿共147页2.1.2 线性表类型的应用算法算法2.1voidunion(List&LA,List&LB)/将所有在线性表将所有在线性表LB中但不在中但不在LA中的数据元中的数据元/素插入到素插入到LA中中,/算法执行之后,线性表算法执行之后,线性表LB不再存在。不再存在。La_len=ListLength(LA);/求得线性表求得线性表LA/的长度的长度while(!ListEmpty(LB)/依次处理依次处理LB中中/元素直至元素直至LB为空表止。为空表止。第
13、17页,本讲稿共147页2.1.2 线性表类型的应用 ListDelete(LB,1,e);/从从LB中删除第中删除第1个数个数/据元素并赋给据元素并赋给eif(!LocateElem(LA,e,equal()ListInsert(LA,+La_len,e);/当当LA中不存在和中不存在和e值相同的数据元素时进行值相同的数据元素时进行/插入插入/whileDestroyList(LB);/销毁线性表销毁线性表LB/union第18页,本讲稿共147页2.1.2 线性表类型的应用例例2-2已知一个已知一个“非纯集合非纯集合”B,试构造一个集合,试构造一个集合A,使,使A中只包含中只包含B中所有值
14、各不相同的数据元中所有值各不相同的数据元素。素。算法算法2.2voidpurge(List&LA,ListLB)/构造线性表构造线性表LA,使其只包含,使其只包含LB中所有值不相中所有值不相/同的数据元素同的数据元素,算法不改变线性表算法不改变线性表LB第19页,本讲稿共147页2.1.2 线性表类型的应用 InitList(LA);/创建一个空的线性表创建一个空的线性表LALa_len=0;Lb_len=ListLength(LB);/求线性表求线性表LB的的长度长度for(i=1;i=Lb_len;i+)/依次处理依次处理LB中每个元素中每个元素GetElem(LB,i,e);/取取LB中
15、第中第i个个数据数据/元素赋给元素赋给e第20页,本讲稿共147页2.1.2 线性表类型的应用E if(!LocateElem(LA,e,equal()ListInsert(LA,+La_len,e);/当当LA中不存在和中不存在和e值相值相/同的数据元素时进行插入同的数据元素时进行插入/for/purge第21页,本讲稿共147页2.1.2 线性表类型的应用例例2-3判别两个集合是否相等。判别两个集合是否相等。算法算法2.3boolisEqual(ListLA,ListLB)/若线性表若线性表LA和和LB不仅长度相等,且所不仅长度相等,且所/含数据元素也相同,含数据元素也相同,则返回则返回T
16、RUE,否则,否则/返回返回FALSE。La_len=Listlength(LA);Lb_len=Listlength(LB);第22页,本讲稿共147页2.1.2 线性表类型的应用if(La_len!=Lb_len)returnFALSE;/两表的长度不等两表的长度不等elsei=1;found=TRUE;while(i=La_len&found)GetElem(LA,i,e);/取得取得LA中一个元素中一个元素第23页,本讲稿共147页2.1.2 线性表类型的应用if(LocateElem(LB,e,equal()i+;/依次处理下一个依次处理下一个elsefound=FALSE;/LB中
17、没有和该元素相同的元素中没有和该元素相同的元素/whilereturnfound;/else/isEqual第24页,本讲稿共147页2.2线性表的顺序存储表示和实现线性表的顺序存储表示和实现2.2.1顺序表顺序表顺序表是线性表的顺序存储表示的简称,它指顺序表是线性表的顺序存储表示的简称,它指的是,的是,“用一组地址连续的存储单元依次存放线用一组地址连续的存储单元依次存放线性表中的数据元素性表中的数据元素”,即以,即以“存储位置相邻存储位置相邻”表表示示“位序相继的两个数据元素之间的前驱和后继位序相继的两个数据元素之间的前驱和后继的关系的关系(有序对有序对),并以表中第一个元,并以表中第一个元
18、素的存储位置作为线性表的起始地址,称作线性素的存储位置作为线性表的起始地址,称作线性表的基地址。如下图所示。表的基地址。如下图所示。第25页,本讲稿共147页 2.2.1 顺序表 不失一般性,假设每个数据元素占据的存储不失一般性,假设每个数据元素占据的存储量是一个常量量是一个常量C,则后继元素的存储地址和其前,则后继元素的存储地址和其前驱元素相隔一个常量,驱元素相隔一个常量,即:即:LOC(ai)=LOC(ai-1)+C一个数据元素所一个数据元素所 占存储量占存储量第26页,本讲稿共147页2.2.1 顺序表由此,所有数据元素的存储位置均可由第一个由此,所有数据元素的存储位置均可由第一个数据元
19、素的存储位置得到数据元素的存储位置得到LOC(ai)=LOC(a1)+(i-1)C基地址基地址用用C语言描述的顺序表类型如下所示:语言描述的顺序表类型如下所示:第27页,本讲稿共147页2.2.1 顺序表/存储结构存储结构constintMAXLISTSIZE=80;/预设的存预设的存储储/空间最大容量空间最大容量typedefstructElemType*elem;/存储空间基存储空间基址址intlength;/当前长度当前长度intlistsize;/允许的最大存储容允许的最大存储容量量(以以sizeof(ElemType)为单位为单位)SqList;/俗称俗称顺序表顺序表第28页,本讲稿
20、共147页2.2.1 顺序表/基本操作接口基本操作接口(函数声明函数声明)voidInitList(SqList&L,intmaxsize);/构造一个最大存储容量为构造一个最大存储容量为maxsize的空的的空的/顺序表顺序表L。voidDestroyList(SqList&L)/销毁顺序表销毁顺序表L。第29页,本讲稿共147页2.2.1 顺序表boolListEmpty(SqListL)/若顺序表若顺序表L为空表,则返回为空表,则返回TRUE,否则,否则/返回返回FALSE。intListLength(SqListL)/返回顺序表返回顺序表L中元素个数。中元素个数。第30页,本讲稿共14
21、7页2.2.1 顺序表 intPriorElem(SqListL,ElemTypecur_e)/若若cur_e是顺序表是顺序表L的元素,则返回其前驱的位序的元素,则返回其前驱的位序/(设第一个元素的前驱的位序为设第一个元素的前驱的位序为0),否则返回,否则返回-1。intNextElem(SqListL,ElemTypecur_e)/若若cur_e是顺序表是顺序表L的元素,则返回其后继的位序的元素,则返回其后继的位序/(设最后一个元素的后继的位序为设最后一个元素的后继的位序为L的表长的表长+1),否则,否则/返回返回-1。第31页,本讲稿共147页2.2.1 顺序表boolGetElem(Sq
22、ListL,intpos,ElemType&e)/若若1posLengthList(L),则用,则用e带回顺序表带回顺序表L中第中第pos个元素个元素/的值且返回函数值为的值且返回函数值为TRUE,否则返回函数值为,否则返回函数值为FALSE。intLocateElem(SqListL,ElemTypee,bool(*compare)(ElemType,ElemType)/返回顺序表返回顺序表L中第中第1个与个与e满足关系满足关系compare()的数的数/据元素的位序。若这样的元素不存在,则返回值为据元素的位序。若这样的元素不存在,则返回值为0。/compare()为数据元素的判定函数。为数
23、据元素的判定函数。第32页,本讲稿共147页2.2.1 顺序表voidListTraverse(SqListL,void(*visit)(ElemType)/依次对顺序表依次对顺序表L的每个元素调用函数的每个元素调用函数/visit()。一旦。一旦visit()失败,则操作失败。失败,则操作失败。voidClearList(SqList&L)/将顺序表将顺序表L重置为空表。重置为空表。第33页,本讲稿共147页2.2.1 顺序表boolPutElem(SqListL,intpos,ElemType&e)/若若1posLengthList(L),则对顺序表,则对顺序表L中第中第pos/个元素赋值
24、同个元素赋值同e的值且返回函数值为的值且返回函数值为TRUE,否则返,否则返/回函数值为回函数值为FALSE。boolListInsert(SqList&L,intpos,ElemTypee)/若存储空间未满且若存储空间未满且1posLengthList(L)+1,则在,则在/顺序表顺序表L的第的第pos个元素之前插入新的元素个元素之前插入新的元素e,L的长的长/度增度增1,且返回函数值为,且返回函数值为TRUE,否则不改变顺序表且,否则不改变顺序表且/返回函数值为返回函数值为FALSE。第34页,本讲稿共147页2.2.1 顺序表boolListDelete(SqList&L,intpos,
25、ElemType&e)/若若1posLengthList(L),则删除顺序表,则删除顺序表L/的第的第pos个元素个元素e,L的长度增的长度增1,且返回,且返回函函/数值为数值为TRUE,否则不改变顺序表且返回函,否则不改变顺序表且返回函/数值为数值为FALSE。第35页,本讲稿共147页2.2.1 顺序表以上定义的函数可在程序设计中引用,例如,以上定义的函数可在程序设计中引用,例如,述算法述算法2.2可改写为下列可在主函数中调用的函数。可改写为下列可在主函数中调用的函数。voidpurge(SqList&La,SqListLb)/构造顺序表构造顺序表La,使其只包含,使其只包含Lb中所有值中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 数据结构 教案 优秀 课件
限制150内