【教学课件】第二章线性表.ppt
《【教学课件】第二章线性表.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第二章线性表.ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章 线性表n n学习要点学习要点 n n了解线性表的逻辑结构是数据元素之间存在了解线性表的逻辑结构是数据元素之间存在着线性关系,在计算机中表示这种关系的两着线性关系,在计算机中表示这种关系的两种不同的存储结构是顺序存储结构和链式存种不同的存储结构是顺序存储结构和链式存储结构。储结构。n n熟熟练练掌掌握握线线性性表表的的两两种种存存储储结结构构,即即顺顺序序存存储结构和链式存储结构。储结构和链式存储结构。n n熟熟练练掌掌握握线线性性表表的的两两种种存存储储结结构构的的基基本本算算法法:查找、插入、删除等。查找、插入、删除等。2.1线性表的基本概念n n线性表的定义线性表是线性表是线性表是
2、线性表是nn个类型相同数据元素的有限序列,个类型相同数据元素的有限序列,个类型相同数据元素的有限序列,个类型相同数据元素的有限序列,Linear-list=(D,R)Linear-list=(D,R)其中:其中:其中:其中:D=aD=ai i|a|ai i datatype,i=0,1,n-1datatype,i=0,1,n-1R=aR=|a|ai i,a,ai+1i+1D,1in-1D,1in-1或记作(或记作(或记作(或记作(a a0 0,a,a1 1,a,a2 2,a,an-1n-1)。)。)。)。姓名 电话号码蔡颖63214444陈红63217777刘建平 63216666王小林 63
3、218888张力63215555.例1、数学中的数列(11,13,15,17,19,21)例2、英文字母表(A,B,C,D,EZ)。例3、某单位的电话号码簿。说明:说明:说明:说明:设设设设A=A=(a a0 0,a,a1 1,.,a,.,ai-1i-1,a,ai i,a,ai+1i+1,a,an-1n-1)是一线)是一线)是一线)是一线性表性表性表性表1)1)不同线性表中数据元素的类型可以是各种各样的,但同一线不同线性表中数据元素的类型可以是各种各样的,但同一线不同线性表中数据元素的类型可以是各种各样的,但同一线不同线性表中数据元素的类型可以是各种各样的,但同一线性表中的元素必须是性表中的元
4、素必须是性表中的元素必须是性表中的元素必须是同一类型同一类型同一类型同一类型的;的;的;的;2)2)在表中在表中在表中在表中a ai-1i-1 领先于领先于领先于领先于a ai i,a ai i 领先于领先于领先于领先于a ai+1i+1,称,称,称,称a ai-1i-1 是是是是a ai i 的直接前驱,的直接前驱,的直接前驱,的直接前驱,a ai+1i+1 是是是是a ai i 的直接后继;的直接后继;的直接后继;的直接后继;3)3)在线性表中,除第一个元素和最后一个元素之外,其他元素在线性表中,除第一个元素和最后一个元素之外,其他元素在线性表中,除第一个元素和最后一个元素之外,其他元素在
5、线性表中,除第一个元素和最后一个元素之外,其他元素都有且仅有一个直接前驱,有且仅有一个直接后继,这是都有且仅有一个直接前驱,有且仅有一个直接后继,这是都有且仅有一个直接前驱,有且仅有一个直接后继,这是都有且仅有一个直接前驱,有且仅有一个直接后继,这是所有所有所有所有线性结构线性结构线性结构线性结构的共同特征。线性表是一种线性数据结构;的共同特征。线性表是一种线性数据结构;的共同特征。线性表是一种线性数据结构;的共同特征。线性表是一种线性数据结构;4)4)线性表中元素的个数线性表中元素的个数线性表中元素的个数线性表中元素的个数nn称为称为称为称为线性表的长度线性表的长度线性表的长度线性表的长度,
6、n=0n=0时称空表;时称空表;时称空表;时称空表;5)a5)ai i是线性表的第是线性表的第是线性表的第是线性表的第i+1i+1个元素,称个元素,称个元素,称个元素,称i+1i+1为数据元素为数据元素为数据元素为数据元素a ai i 的序号,每的序号,每的序号,每的序号,每一个元素在线性表中的位置,仅取决于它的序号;一个元素在线性表中的位置,仅取决于它的序号;一个元素在线性表中的位置,仅取决于它的序号;一个元素在线性表中的位置,仅取决于它的序号;线性表的其他表示方式线性表的其他表示方式线性表的其他表示方式线性表的其他表示方式二元组表示二元组表示二元组表示二元组表示L=D,SL=,其中,其中,
7、其中,其中D=aD=a0 0,a,a1,1,a a2,2,.a.an-1n-1 S=RR=aS=RR=,a图示表示图示表示图示表示图示表示a ai i+1a a0a ai-i-1a a1 1a ai ia an-n-1顶点:表示一个数据元素顶点:表示一个数据元素边:表示是数据间的顺序结构关系边:表示是数据间的顺序结构关系n n线性表的基本操作n n初始化操作初始化操作初始化操作初始化操作:InitiateInitiate(L L)设定一个空的线性表设定一个空的线性表设定一个空的线性表设定一个空的线性表LL;n n求长度函数求长度函数求长度函数求长度函数:LengthLength(L L)求线性
8、表求线性表求线性表求线性表L L中数据元素的个数中数据元素的个数中数据元素的个数中数据元素的个数;n n查找函数查找函数查找函数查找函数:GetGet(L L,i i)取得线性表取得线性表取得线性表取得线性表L L的第的第的第的第i i个数据元素个数据元素个数据元素个数据元素;n n定位函数定位函数定位函数定位函数:LocateLocate(L L,x x)求数据元素求数据元素求数据元素求数据元素x x在线性表在线性表在线性表在线性表L L中的位置中的位置中的位置中的位置;n n插入操作插入操作插入操作插入操作:InsertInsert(L L,i i,x x)在线性表中第在线性表中第在线性表
9、中第在线性表中第i i个位置插入一个数据元素个位置插入一个数据元素个位置插入一个数据元素个位置插入一个数据元素;n n删除操作删除操作删除操作删除操作:DeleteDelete(L L,i i)在线性表中第在线性表中第在线性表中第在线性表中第i i(0in-10in-1)个结点;)个结点;)个结点;)个结点;为了存储线性表,至少要保存两类信息:为了存储线性表,至少要保存两类信息:1)线性表中的数据元素;)线性表中的数据元素;2)线性表中数据元素的顺序关系;)线性表中数据元素的顺序关系;如何在计算机中存储线性表?如何在计算机中实现线性表的基本操作?2.22.2线性表的顺序存储结构线性表的顺序存储
10、结构 一、线性表的顺序存储结构顺序表线性表的顺序存储结构,就是用一组线性表的顺序存储结构,就是用一组连连续的续的内存单元内存单元依次依次存放线性表的数据元素。存放线性表的数据元素。a a0 0a a1 1a ai-1i-1a ai ia ai+1i+1a an-1n-1线性表(线性表(a0,a1,a2.an-1)的顺序存储结构的顺序存储结构用顺序存储结构存储的线用顺序存储结构存储的线性表性表称为顺序表称为顺序表说明:n n在顺序存储结构下,线性表元素在顺序存储结构下,线性表元素在顺序存储结构下,线性表元素在顺序存储结构下,线性表元素之间的逻辑关系,通过元素的存之间的逻辑关系,通过元素的存之间的
11、逻辑关系,通过元素的存之间的逻辑关系,通过元素的存储顺序反映(表示)出来,即逻储顺序反映(表示)出来,即逻储顺序反映(表示)出来,即逻储顺序反映(表示)出来,即逻辑关系相邻,物理位置也相邻;辑关系相邻,物理位置也相邻;辑关系相邻,物理位置也相邻;辑关系相邻,物理位置也相邻;n n 假设线性表中每个数据元素占用假设线性表中每个数据元素占用假设线性表中每个数据元素占用假设线性表中每个数据元素占用dd个存储单元,那么,在顺序存储个存储单元,那么,在顺序存储个存储单元,那么,在顺序存储个存储单元,那么,在顺序存储结构中,线性表的第结构中,线性表的第结构中,线性表的第结构中,线性表的第i i个元素的存个
12、元素的存个元素的存个元素的存储位置与第储位置与第储位置与第储位置与第1 1个元素的存储位置的个元素的存储位置的个元素的存储位置的个元素的存储位置的关系是:关系是:关系是:关系是:Loc(aLoc(ai-1i-1)=Loc(a)=Loc(a0 0)+(i1)+(i1)*d dd d个单元个单元Loc(a0)Loc(ai-1)a a0 0a a1 1a ai-1i-1a ai ia ai+1i+1a an-1n-1怎样在计算机上实现怎样在计算机上实现线性表的顺序存储结构?线性表的顺序存储结构?因为高级语言中的一维数组是采用顺序结构储存的,因此我们使用一维数组来表示线性表,数组的类型由线性表中的数据
13、元素的性质决定。顺序表的类型定义顺序表的类型定义#defineMaxnum200/*分配的顺序表总长度分配的顺序表总长度*/elementtypeelementMaxnum;/*定义元素类型数组定义元素类型数组*/intn;/*当前顺序表存储数据的个数当前顺序表存储数据的个数*/为了把线性表的表元素和当前长度整合作为该线性表的特性,为了把线性表的表元素和当前长度整合作为该线性表的特性,我们定义一个结构体如下:我们定义一个结构体如下:structsqlistelementtypeelementMaxnum;/*顺序表数组顺序表数组*/intn;/*当前线性表长度当前线性表长度*/;typedef
14、structsqlist*ptsqlist;设设A=(a0,a1,a2,.an-1)是一线性表,)是一线性表,L是是sqlist类型的结构变量,用于存放线性表类型的结构变量,用于存放线性表A,则,则L在内在内存中的状态如图所示:存中的状态如图所示:1 12 2i-1i-1i ii+1i+1n nL.elementiL.elementiL.nL.nn n存放线性表元素存放线性表元素的一维数组的一维数组顺序表通过顺序表通过顺序表通过顺序表通过元素的存储顺序元素的存储顺序元素的存储顺序元素的存储顺序反映线性表元素间的逻辑关系反映线性表元素间的逻辑关系反映线性表元素间的逻辑关系反映线性表元素间的逻辑关
15、系a a0 0a a1 1a ai-1i-1a ai ia ai+1i+1a an-1n-1二、顺序表的基本操作算法1.1.1.1.创建并初始化顺序表创建并初始化顺序表创建并初始化顺序表创建并初始化顺序表 2.2.2.2.在顺序表中查找下标为在顺序表中查找下标为在顺序表中查找下标为在顺序表中查找下标为i i i i的元素(的元素(的元素(的元素(0in-10in-10in-10in-1)并返回该)并返回该)并返回该)并返回该元素元素元素元素 3.3.3.3.顺序表的判空操作顺序表的判空操作顺序表的判空操作顺序表的判空操作 intEmpty(ptsqlistlist)iflist-n=0retu
16、rn(1);return(0);ptsqlistInitiate(void)ptsqlistlist;list=(ptsqlist)malloc(sizeof(structsqlist)if!listprintf(overflow!n);return(null);elselist-n=0;return(list);elementtypeGet(ptsqlistlist,inti)if(i=list-n)printf(notexistn);return(null);return(list-elementi);4.4.插入插入插入插入insert(L,i,x)insert(L,i,x)功能:功能:
17、功能:功能:在顺序表在顺序表在顺序表在顺序表L L L L中第中第中第中第i i i i个位置后插入一元素插入个位置后插入一元素插入个位置后插入一元素插入个位置后插入一元素插入一一一一个新个新个新个新元素元素元素元素x,x,x,x,插入前线性表为插入前线性表为插入前线性表为插入前线性表为 (a(a(a(a0 0 0 0,a,a,a,a1 1 1 1,a,a,a,a2 2 2 2,a,a,a,ai-1i-1i-1i-1,a,a,a,ai i i i,a,a,a,an-1 n-1 n-1 n-1)插入后插入后插入后插入后,线性表长度为线性表长度为线性表长度为线性表长度为n+1,n+1,n+1,n+
18、1,线性表为线性表为线性表为线性表为 (a(a(a(a0 0 0 0,a,a,a,a1 1 1 1,a,a,a,a2 2 2 2,a,a,a,ai-1i-1i-1i-1,x,a,x,a,x,a,x,ai i i i,a,a,a,an-1 n-1 n-1 n-1)插入前插入前n=7插入后插入后n=8插入操作示意图:插入操作示意图:insert(p,3,11)121234343 31111272716161471474444a a0 0a a1 1a a2 2a a3 3a a4 4a a5 5a a6 6a a7 71111121234343 3272716161471474444a a0 0a
19、 a1 1a a2 2a a3 3a a4 4a a5 5a a6 6a a7 7插入操作算法intInsert(ptsqlistlist,inti,elementtypex)intj;if(i=list-n)/*位置不合理位置不合理*/printf(“notexit!n”);return(0);if(list-n=Maxnum)/*空间已满空间已满*/printf(“outofspace!n”);return(0);for(j=list-n-1;j=i;j-)/*向后移动元素向后移动元素*/list-elementj+1=list-elementj;list-elementi=x;/*插入元
20、素插入元素*/list-n+;/*长度加长度加1*/return(1);演示5.5.删除删除删除删除delete(L,i)delete(L,i)功能:功能:功能:功能:删除顺序表删除顺序表删除顺序表删除顺序表L L L L中下标为中下标为中下标为中下标为i i i i(0in-10in-10in-10in-1)的数据元)的数据元)的数据元)的数据元素素素素,删除前线性表为删除前线性表为删除前线性表为删除前线性表为 (a(a(a(a0 0 0 0,a a a a1 1 1 1,a a a an-1n-1n-1n-1)删除后删除后删除后删除后,线性表长度为线性表长度为线性表长度为线性表长度为n-1
21、,n-1,n-1,n-1,线性表为线性表为线性表为线性表为 (a(a(a(a0 0 0 0,a a a a1 1 1 1,a a a ai-1i-1i-1i-1,a a a ai+1i+1i+1i+1,a a a an-1n-1n-1n-1)删除前删除前n=8删除后删除后n=7删除操作示意图:删除操作示意图:Delete(p,3)1111121234343 3272716161471474444121234343 31111272716161471474444a a0 0a a1 1a a2 2a a3 3a a4 4a a5 5a a6 6a a7 7a a0 0a a1 1a a2 2a
22、a3 3a a4 4a a5 5a a6 6a a7 7删除操作算法intDelete(ptsqlistlist,inti)intj;if(i=list-n)/*位置不合理位置不合理*/printf(“notexist!n”);return(0);for(j=i;jn-1;j+)/*向前移动元素向前移动元素*/list-elementj=list-elementj+1;list-n-;/*长度减长度减1*/return(1);演示6.6.顺序表的反转操作顺序表的反转操作顺序表的反转操作顺序表的反转操作viodfanzhuanlist(ptsqlistlist)elementtypemid;in
23、ta,z;a=0;z=list-n-1;for(;aelementa;list-elementa=list-elementz;list-elementz=mid;a a0 0a a1 1a ai-1i-1a ai ia ai+1i+1a an-1n-1mid怎样分析插入和删除算法怎样分析插入和删除算法的的T(n)呢?)呢?在下标为在下标为i的位置的位置(第第i+1个位置个位置)前插入前插入元素下标元素下标移动元素个数移动元素个数0n1n-1in-in-11n0三、算法时间复杂度分析在顺序表中插入元素,时间主要耗费在移动元素在顺序表中插入元素,时间主要耗费在移动元素上,而移动的个数取决于插入的位
24、置以及表的长度。上,而移动的个数取决于插入的位置以及表的长度。1 12 2i-1i-1i ii+1i+1n na a0 0a a1 1a ai-1i-1a ai ia ai+1i+1a an-1n-1假设在线性表的任何位置插入元素的概率相同,即假设在线性表的任何位置插入元素的概率相同,即pi=1/(n+1)则有:则有:假设假设pi是在第是在第i个元素之前插入元素的概率,在长度为个元素之前插入元素的概率,在长度为n的顺的顺序表中插入一个元素,所需移动元素个数数学期望值为:序表中插入一个元素,所需移动元素个数数学期望值为:假设在线性表的任何位置删除元素的概率相同,即假设在线性表的任何位置删除元素的
25、概率相同,即pd=1/n则有:则有:删除下标为删除下标为i的元素(第的元素(第i+1个)需移动个)需移动n-i-1个元素,设在相个元素,设在相应位置删除元素的概率是应位置删除元素的概率是pd,则删除的平均移动次数是:,则删除的平均移动次数是:在顺序表中插入或删除元素的在顺序表中插入或删除元素的时间时间复杂度时间时间复杂度为为O(n)O(n)相关例题例1 利用顺序表设计一算法,用以清除表利用顺序表设计一算法,用以清除表L中的多余的重复结中的多余的重复结点。如表点。如表L(21,3,5,3,21,3,90,5)运算后变为)运算后变为L(21,3,5,90)算法思想应该算法思想应该是怎样的呢?是怎样
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第二 线性
限制150内