版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于数据结构线性表顺序表第1页,讲稿共48页,2023年5月2日,星期三线性结构四大特点第一个元素无直接前驱最后一个元素无直接后继除第一个元素外,其他每个数据元素都有唯一一个直接前驱除最后一个元素外,其他每个数据元素都有唯一一个直接后面第2页,讲稿共48页,2023年5月2日,星期三线性表定义记法特点结构基本术语空表、表长直接前驱、直接后继位序最基本、最常用的线性结构。若n(n≥0)个数据特性相同的数据元素组成的有限序列。(a1,a2,…,ai-1,ai,ai+1,…,an)1.同一线性表中的数据元素必须具有相同特性2.具有线性结构的四大特性3.数据元素之间存在序偶关系逻辑结构(1对1)、物理结构(顺序存储和链式存储)第3页,讲稿共48页,2023年5月2日,星期三线性表的抽象数据类型数据对象数据关系操作集初始化、销毁、查找、插入、删除、求前驱(后继)、遍历线性表中的数据元素具有相同特性相邻数据元素之间存在序偶关系线性表的基本操作声明仅是模型定义,不涉及模型实现,参数不必考虑具体数据类型,实际应用中,具体问题具体分析。第4页,讲稿共48页,2023年5月2日,星期三顺序表定义特点C描述基本形态基本操作实现用一组地址连续的存储单元依次存放线性表中的数据元素。采用这种存储结构的线性表叫做顺序表。
a1a2
…ai-1ai
…an基地址1.数据元素在“逻辑关系上的相邻”用“物理地址相邻”来表示。2.顺序表中任一元素都可“随机存取”。第5页,讲稿共48页,2023年5月2日,星期三typedefstruct{
}SqList;//俗称顺序表#defineMAXSIZE100//线性表存储空间的分配量,即数组长度ElemTypeelem[MAXSIZE];int
length;//当前长度顺序表的C描述第6页,讲稿共48页,2023年5月2日,星期三顺序表空:条件L.length==0
不允许删除操作顺序表满:条件L.length==MAXSIZE
不允许插入操作不空也不满:可以插入,删除操作顺序表的基本形态第7页,讲稿共48页,2023年5月2日,星期三顺序表----基本算法根据顺序表的实现形式,表长length是类型定义的属性,可以实现求表长、初始化、取值、判空等操作,时间复杂度均为O(1)。而遍历算法、查找表中元素的存在、插入、删除等操作,时间复杂度均为O(n)。第8页,讲稿共48页,2023年5月2日,星期三(1)初始化空表时间复杂为:O(1)顺序表----基本算法L.length=0;第9页,讲稿共48页,2023年5月2日,星期三(2)判空时间复杂为:O(1)顺序表----基本算法if(L.length==0) returnOK;else returnERROR;第10页,讲稿共48页,2023年5月2日,星期三(3)求表长时间复杂为:O(1)顺序表----基本算法 returnL.length;第11页,讲稿共48页,2023年5月2日,星期三(4)取元素(取第i个元素e)时间复杂为:O(1)顺序表----基本算法e=L.elem[i-1];i合法if(i>=1&&i<=L.length){ e=L.elem[i-1]; returnOK;}else{ returnERROR;}第12页,讲稿共48页,2023年5月2日,星期三顺序表----基本算法(5)遍历for(i=1;i<=L.length;i++)visit(L.elem[i-1]);时间复杂为:O(L.length)第13页,讲稿共48页,2023年5月2日,星期三顺序表----基本算法(6)查找搜索顺序表中是否存在指定的数据元素。存在,查找成功;否则,查找失败。第14页,讲稿共48页,2023年5月2日,星期三例如:顺序表23754138546217L.elem[0]L.length-1e=38i12341850可见,基本操作是:将顺序表中的元素逐个和给定值e相比较。第15页,讲稿共48页,2023年5月2日,星期三算法的时间复杂度为:
O(L.length)intLocateElem(SqListL,Elemtypee){ for(i=1;i<=L.length;i++){ if(e==L.elem[i-1]){ returni; } } return0;}第16页,讲稿共48页,2023年5月2日,星期三顺序表----基本算法(7)插入在顺序表中插入指定的数据元素,插入成功,表长增1。第17页,讲稿共48页,2023年5月2日,星期三线性表操作
ListInsert(&L,i,e)的实现:首先分析:插入元素时,线性表的逻辑结构发生什么变化?第18页,讲稿共48页,2023年5月2日,星期三
(a1,…,ai-1,ai,…,an)改变为
(a1,…,ai-1,e,ai,…,an)a1a2
…ai-1ai
…ana1a2
…ai-1
…aiean<ai-1,ai><ai-1,e>,<e,ai>表的长度增加第19页,讲稿共48页,2023年5月2日,星期三必备条件:表存在且不满i值的合法性检查:1~L.length+1将第i个到最后1个元素依次后移一个位置;在i个位置插入元素;表长增加1。分析:第20页,讲稿共48页,2023年5月2日,星期三2118307542568721183075例如:ListInsert_Sq(L,5,66)
L.length-1087564266第21页,讲稿共48页,2023年5月2日,星期三O(L.length)算法的时间复杂度为:StatusListInsert(SqList&L,inti,ElemTypee){if(i>=1&&i<=L.length+1){ for(j=L.length;j>=i;j--)//元素后移
L.elem[j]=L.elem[j-1]; L.elem[i-1]=e;//插入e L.length++;//表长增1 returnOK;//插入成功
}else{ returnERROR;}}第22页,讲稿共48页,2023年5月2日,星期三插入算法时间复杂度分析:考虑移动元素的平均情况插入位置需要移动的结点次数1n2n-1……n1n+10平均次数:(1+2+…+n-1+n)/(n+1)=n/2T(n)=O(n)第23页,讲稿共48页,2023年5月2日,星期三顺序表----基本算法(8)删除在顺序表中删除指定位置的数据元素,删除成功,表长减1。第24页,讲稿共48页,2023年5月2日,星期三线性表操作
ListDelete(&L,i,&e)的实现:首先分析:删除元素时,线性表的逻辑结构发生什么变化?第25页,讲稿共48页,2023年5月2日,星期三
(a1,…,ai-1,ai,ai+1,…,an)改变为
(a1,…,ai-1,ai+1,…,an)ai+1…an<ai-1,ai>,<ai,ai+1><ai-1,ai+1>表的长度减少a1a2
…ai-1ai
ai+1
…ana1a2
…ai-1
第26页,讲稿共48页,2023年5月2日,星期三必备条件:表非空i值的合法性检查:1~L.length取出第i个元素;第i个元素以后的元素向前移动一个位置;表长减小1。分析:第27页,讲稿共48页,2023年5月2日,星期三2118307542568721183075L.length-10pppq8756例如:ListDelete_Sq(L,5,e)
p第28页,讲稿共48页,2023年5月2日,星期三算法时间复杂度为:
O(L.length)StatusListDelete(SqList&L,inti,ElemType&e){if(i>=1&&i<=L.length){ e=L.elem[i-1]; for(j=i+1;j<=L.length;j++)//元素前移
L.elem[j-2]=L.elem[j-1]; L.length--;//表长减1 returnOK;//删除成功
}else{ returnERROR;}}第29页,讲稿共48页,2023年5月2日,星期三
删除算法时间复杂度分析:考虑移动元素的平均情况删除位置需要移动的结点次数1n-12n-2……n0平均次数:(0+1+…+n-11)/n=(n-1)/2T(n)=O(n)第30页,讲稿共48页,2023年5月2日,星期三时间复杂度为O(1)顺序表----基本算法(9)求前驱pre=L.elem[i-2];在顺序表中查找元素cur_e,位序为ii=LocateElem(L,cur_e);cur_e是顺序表中元素,但不是第一个元素便有直接前驱pre第31页,讲稿共48页,2023年5月2日,星期三
顺序表----基本算法(10)求后继next=L.elem[i];在顺序表中查找元素cur_e,位序为ii=LocateElem(L,cur_e);cur_e是顺序表中元素,但不是最后一个元素便有直接后继next时间复杂度为O(1)第32页,讲稿共48页,2023年5月2日,星期三顺序表----经典算法分析算法插入删除基本操作移动元素移动元素平均移动次数时间复杂度O(n)O(n)最好情况在n+1处插入,不需移动删除第n个,不需移动第33页,讲稿共48页,2023年5月2日,星期三线性表应用举例例1:合并线性表例2:归并线性表第34页,讲稿共48页,2023年5月2日,星期三例1:合并线性表假设有两个集合A和B分别用两个线性表LA和LB表示,即:线性表中的数据元素即为集合中的成员。现要求一个新的集合A=A∪B。——去掉重复元素第35页,讲稿共48页,2023年5月2日,星期三扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。问题分析:第36页,讲稿共48页,2023年5月2日,星期三1.从线性表LB中依次取得每个数据元素;2.依值在线性表LA中进行查访;3.若不存在,则插入之。GetElem(LB,i)→e
LocateElem(LA,e,equal())
ListInsert(LA,n+1,e)操作步骤:第37页,讲稿共48页,2023年5月2日,星期三
GetElem(Lb,i,e);//取Lb中第i个数据元素赋给e
if(!LocateElem(La,e,equal()))
ListInsert(La,++La_len,e);
//La中不存在和e相同的数据元素,则插入之voidunion(List&La,ListLb){La_len=ListLength(La);//求线性表的长度
Lb_len=ListLength(Lb);for(i=1;i<=Lb_len;i++){}}//union第38页,讲稿共48页,2023年5月2日,星期三算法分析时间复杂度:
O(ListLength(LA)*ListLength(LB))空间复杂度:
O(1)第39页,讲稿共48页,2023年5月2日,星期三例2:归并线性表已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。——不去掉重复元素第40页,讲稿共48页,2023年5月2日,星期三LC中的数据元素或是LA中的数据元素,或是LB中的数据元素。则先设LC为空表,然后将LA或LB中的元素逐个插入到LC中。为使LC表按值非递减有序排列,可设两个整型变量i、j,分别指向LA和LB,比较i、j所指元素的大小,决定哪个元素插入LC。插入后,在LA或LB中顺序后移。问题分析:第41页,讲稿共48页,2023年5月2日,星期三voidMergeList(ListLa,ListLb,List&Lc){
//本算法将非递减的有序表La和Lb归并为Lc}//merge_listwhile((i<=La_len)&&(j<=Lb_len))
{……//La和Lb均不空
}while(i<=La_len)
//若La不空while(j<=Lb_len)//若Lb不空InitList(Lc);//构造空的线性表Lci=j=1;k=0;La_len=ListLength(La);Lb_len=ListLength(Lb);第42页,讲稿共48页,2023年5月2日,星期三GetElem(La,i,ai);GetElem(Lb,j,bj);if(ai<=bj){ListInsert(Lc,++k,ai);++i;}else{ListInsert(Lc,++k,bj);++j;}
第43页,讲稿共48页,2023年5月2日,星期三
while(i<=La_len){//当La不空时
GetElem(La,i++,ai);ListInsert(Lc,++k,ai);
}
//插入La表中剩余元素
while(j<=Lb_len){//当Lb不空时
GetElem(Lb,j++,bj);ListInsert(Lc,++k,bj);
}
//插入Lb表中剩余元素第44页,讲稿共48页,2023年5月2日,星期三算法分析时间复杂度:O(ListLength(LA)+ListLeng
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 33330-2016锦纶6浸胶帘子布技术条件和评价方法》(2026年)深度解析
- (正式版)DB12∕T 870-2019 《托盘包装方法和包装尺寸设计通则 》
- 任务6.2诚信店铺表现
- 5G-A实训任务-专网理论课程3
- 医疗数据安全态势感知:算法优化
- 医疗数据安全外部威胁防范策略
- 背影女孩课件
- 北京市海淀清华附中2026届生物高二上期末预测试题含解析
- 医疗数据安全事件预警的区块链监测机制
- 医疗数据安全事件溯源与追责
- CJ/T 107-2013城市公共汽、电车候车亭
- 学校手机保管协议书
- 门店分期转让合同协议
- 销售部年终总结及明年工作计划
- 瑜伽馆年度店长工作总结
- 工作计划执行跟踪表格:工作计划执行情况统计表
- 高效空调制冷机房的关键技术现状与展望
- 医院药学信息服务的方式(医院药学)
- 《小讲课糖尿病》课件
- 《Y移动互联网公司校园招聘问题与优化策略》9200字(论文)
- 数字逻辑与数字系统知到智慧树章节测试课后答案2024年秋武汉科技大学
评论
0/150
提交评论