CH2数据结构课件.ppt

上传人:b****2 文档编号:2676621 上传时间:2022-11-06 格式:PPT 页数:64 大小:649KB
下载 相关 举报
CH2数据结构课件.ppt_第1页
第1页 / 共64页
CH2数据结构课件.ppt_第2页
第2页 / 共64页
CH2数据结构课件.ppt_第3页
第3页 / 共64页
CH2数据结构课件.ppt_第4页
第4页 / 共64页
CH2数据结构课件.ppt_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

CH2数据结构课件.ppt

《CH2数据结构课件.ppt》由会员分享,可在线阅读,更多相关《CH2数据结构课件.ppt(64页珍藏版)》请在冰豆网上搜索。

CH2数据结构课件.ppt

第二章第二章线性表线性表线性结构线性结构特点特点:

在数据元素的非空有限集中:

在数据元素的非空有限集中存在存在唯一唯一的一个被称作的一个被称作“第一个第一个”的数据元素的数据元素存在存在唯一唯一的一个被称作的一个被称作“最后一个最后一个”的数据元素的数据元素除第一个外,集合中的每个数据元素均除第一个外,集合中的每个数据元素均只有一个只有一个前驱前驱除最后一个外,集合中的每个数据元素均除最后一个外,集合中的每个数据元素均只有一只有一个后继个后继2.12.1线性表的逻辑结构线性表的逻辑结构定义:

一个线性表是定义:

一个线性表是nn个数据元素的有限序列个数据元素的有限序列例例英文字母表英文字母表(A,B,C,.Z)是一个线性表是一个线性表例例数据元素数据元素例例一副扑克的点数一副扑克的点数(22,33,44,JJ,QQ,KK,AA)从以上例子可看出线性表的逻辑特征是:

从以上例子可看出线性表的逻辑特征是:

在非空的线性表,有且仅有一个开始结点在非空的线性表,有且仅有一个开始结点aa11,它没它没有直接前趋,而仅有一个直接后继有直接前趋,而仅有一个直接后继aa22;有且仅有一个终端结点有且仅有一个终端结点aann,它没有直接后继,而仅它没有直接后继,而仅有一个直接前趋有一个直接前趋aan-1n-1;其余的内部结点其余的内部结点aaii(2in-1)(2in-1)都有且仅有一个直接都有且仅有一个直接前趋前趋aai-1i-1和一个直接后继和一个直接后继aai+1i+1。

线性表是一种典型的线性结构。

数据的运算是定义线性表是一种典型的线性结构。

数据的运算是定义在逻辑结构上的,而运算的具体实现则是在存储结构在逻辑结构上的,而运算的具体实现则是在存储结构上进行的。

上进行的。

特征:

特征:

元素个数元素个数nn表长度,表长度,n=0n=0空表空表11ini=0数据关系:

数据关系:

Rl=ai-1,ai|ai-1,aiD,i=1,2,n基本操作:

基本操作:

InitList(&L)DestroyList(&L)ClearList(&L)ListEmpty(L)ListLength(L)GetElem(L,I,&e)LocateElem(L,e,compare()PriorElem(L,cur_e,&pre_e)NextElem(L,cur_e,&next_e)ListInsert(&L,i,e)ListDelete(&L,i,&e)ListTraverse(L,visit()ADTList算法算法算法算法2.12.12.12.1利用两个线性表利用两个线性表LALA和和LBLB分别表示两个集合分别表示两个集合AA和和BB,现要求一个新的集合现要求一个新的集合A=ABA=AB。

voidunion(List&La,ListLb)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.22.22.22.2巳知线性表巳知线性表LALA和线性表和线性表LBLB中的数据元素中的数据元素按值非递减有序排列,现要求将按值非递减有序排列,现要求将LALA和和LBLB归并为归并为一个新的线性表一个新的线性表LCLC,且,且LCLC中的元素仍按值非递中的元素仍按值非递减有序排列。

减有序排列。

voidmergelist(listla,listlb,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;elselistinsert(lc,+k,bj);+j;while(I=la-len)getelem(la,I+,ai);listinsert(lc,+k,ai);while(j=lb-len)getelem(lb,j+,bj);listinsert(lc,+k,bj);算法的时间复杂度:

算法的时间复杂度:

O(ListLength(LA)+ListLength(LB))2.22.2线性表的顺序存储结构线性表的顺序存储结构顺序表:

顺序表:

定义:

用一组地址连续的存储单元存放一个线性表叫定义:

用一组地址连续的存储单元存放一个线性表叫元素地址计算方法:

元素地址计算方法:

LOC(aiLOC(ai)=LOC(a1)+(i-1)*L)=LOC(a1)+(i-1)*LLOC(ai+1)=LOC(ai+1)=LOC(aiLOC(ai)+L)+L其中:

其中:

LL一个元素占用的存储单元个数一个元素占用的存储单元个数LOC(aiLOC(ai)线性表第线性表第ii个元素的地址个元素的地址特点:

特点:

实现实现逻辑上相邻逻辑上相邻物理地址相邻物理地址相邻实现实现随机存取随机存取实现:

实现:

可用可用CC语言的一维数组实现语言的一维数组实现a1a2an01n-112n内存内存V数组下标数组下标元素序号元素序号M-1typedefintDATATYPE;#defineM1000DATATYPEdataM;例例typedefstructcardintnum;charname20;charauthor10;charpublisher30;floatprice;DATATYPE;DATATYPElibraryM;备备用用空空间间数据元素不是简单类型时数据元素不是简单类型时,可定义可定义结构体数组结构体数组或动态申请和释放内存或动态申请和释放内存DATATYPE*pData=(DATATYPE*)malloc(M*sizeof(DATATYPE);free(pData);由于由于C语言中的一维数组也是采用顺序存储表示,故可语言中的一维数组也是采用顺序存储表示,故可以用数组类型来描述顺序表。

又因为除了用数组来存以用数组类型来描述顺序表。

又因为除了用数组来存储线性表的元素之外,顺序表还应该用一个变量来表储线性表的元素之外,顺序表还应该用一个变量来表示线性表的长度属性,所以我们用结构类型来定义顺示线性表的长度属性,所以我们用结构类型来定义顺序表类型。

序表类型。

#defineListSize100typedefintDataType;typedefstructDataTypedataListSize;intlength;Sqlist;插入插入定义:

线性表的插入是指在第定义:

线性表的插入是指在第ii(11iin+1n+1)个元素个元素之前插入一个新的数据元素之前插入一个新的数据元素xx,使长度为使长度为nn的线性表的线性表变变为为n+1n+1变成变成长度为长度为n+1n+1的线性表的线性表需将第需将第ii至第至第nn共共(n-i+1)n-i+1)个元素后移个元素后移算法算法VoidInsertList(Sqlist*L,DataTypex,intI)intj;if(Il.length+1)printf(“Positionerror”);returnERROR;if(l.length=ListSize)printf(“overflow”);exit(overflow);for(j=l.length-1;j=I-1;j-)l.dataj+1=l.dataj;l.dataI-1=x;l.length+;内存内存aa11aa22aaiiaai+1i+1aann0011i-1i-1VV数组下标数组下标n-1n-1iinn1122ii元素序号元素序号i+1i+1nnn+1n+1内存内存aa11aa22aaiiaai+1i+1aann0011i-1i-1VV数组下标数组下标n-1n-1iinn1122ii元素序号元素序号i+1i+1nnn+1n+1aan-1n-1xx分析算法的复杂度分析算法的复杂度分析算法的复杂度分析算法的复杂度这里的问题规模是表的长度,设它的值为。

该算法的这里的问题规模是表的长度,设它的值为。

该算法的时间主要化费在循环的结点后移语句上,该语句的执行次时间主要化费在循环的结点后移语句上,该语句的执行次数(即移动结点的次数)是。

由此可看出,所需移动结点数(即移动结点的次数)是。

由此可看出,所需移动结点的次数不仅依赖于表的长度,而且还与插入位置有关。

的次数不仅依赖于表的长度,而且还与插入位置有关。

当当i=n+1时,由于循环变量的终值大于初值,结点后移时,由于循环变量的终值大于初值,结点后移语句将不进行;这是语句将不进行;这是最好最好情况,其时间复杂度情况,其时间复杂度O

(1););当当i=1时,结点后移语句将循环执行时,结点后移语句将循环执行n次,需移动表中次,需移动表中所有结点,这是所有结点,这是最坏最坏情况,其时间复杂度为情况,其时间复杂度为O(n)。

)。

算法时间复杂度算法时间复杂度T(n)T(n)设设PiPi是在第是在第ii个元素之前插入一个元素的概率,个元素之前插入一个元素的概率,则在长度为则在长度为nn的线性表中插入一个元素时,所需的线性表中插入一个元素时,所需移动的元素次数的平均次数为:

移动的元素次数的平均次数为:

也就是说,在顺序表上做插入运算,平均要移动表上一半也就是说,在顺序表上做插入运算,平均要移动表上一半结点。

当表长结点。

当表长n较大时,算法的效率相当低。

虽然较大时,算法的效率相当低。

虽然Eis(n)中中n的的系数较小,但就数量级而言,它仍然是线性阶的。

因的的系数较小,但就数量级而言,它仍然是线性阶的。

因此算法的平均时间复杂度为此算法的平均时间复杂度为O(n)。

动态删除删除定义:

线性表的删除是指将第定义:

线性表的删除是指将第ii(11iinn)个元素删个元素删除,使长度为除,使长度为nn的线性表的线性表变成变成长度为长度为n-1n-1的线性表的线性表需将第需将第i+1i+1至第至第nn共共(n-i)n-i)个元素前移个元素前移算法VoiddeleteList(Sqlist*L,inti)intj;if(il.length)printf(“Positionerror”);returnERRORfor(j=i;jdatap-data表示表示pp指向结点的数据域指向结点的数据域(*p).link(*p).linkp-linkp-link表示表示pp指向结点的指针域指向结点的指针域线性链表线性链表定义:

结点中只含一个指针域的链表叫定义:

结点中只含一个指针域的链表叫,也叫单链表,也叫单链表typedeflistnode*linklist;listnode*p;linklisthead;注意区分注意区分指针变量指针变量和和结点变量结点变量这两个不同的概念。

这两个不同的概念。

P为动态变量,它是通过标准函数生成的,即为动态变量,它是通过标准函数生成的,即p=(listnode*)malloc(sizeof(listnode);函数函数malloc分配了一个类型为分配了一个类型为listnode的结点变量的空间,的结点变量的空间,并将其首地址放入指针变量并将其首地址放入指针变量p中。

一旦中。

一旦p所指的结点变量不所指的结点变量不再需要了,又可通过标准函数再需要了,又可通过标准函数free(p)释放所指的结点变量空间。

释放所指的结点变量空间。

指针变量指针变量P(其值为结点地址)和结点变量(其值为结点地址)和结点变量*P之间的关系。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1