版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章 线性表顺序表线性结构四大特点第一个元素无直接前驱第一个元素无直接前驱最后一个元素无直接后继最后一个元素无直接后继除第一个元素外,其他每个数据元素除第一个元素外,其他每个数据元素都有唯一一个直接前驱都有唯一一个直接前驱除最后一个元素外,其他每个数据元除最后一个元素外,其他每个数据元素都有唯一一个直接后面素都有唯一一个直接后面线性表定义定义记法记法特点特点结构结构基本术语基本术语空表、表长直接前驱、直接后继位序最基本、最常用的线性结构。若最基本、最常用的线性结构。若n(nn(n0) )个个数据特性相同的数据元素组成的有限序列数据特性相同的数据元素组成的有限序列。(a1,a2,ai-1,ai
2、,ai+1,an)1.同一线性表中的数据元素必须具有相同特性2.具有线性结构的四大特性3.数据元素之间存在序偶关系逻辑结构(1对1)、物理结构(顺序存储和链式存储)线性表的抽象数据类型数据对象数据对象数据关系数据关系操作集操作集初始化、销毁、查找、插入、删除、求前驱(后继)、遍历线性表中的数据元素具有相同特性线性表中的数据元素具有相同特性相邻数据元素之间存在序偶关系相邻数据元素之间存在序偶关系线性表的基本操作声明线性表的基本操作声明仅是模型定义,不涉及模型实现,参数不必考虑具仅是模型定义,不涉及模型实现,参数不必考虑具体数据类型,实际应用中,具体问题具体分析。体数据类型,实际应用中,具体问题具
3、体分析。顺序表定义定义特点特点C C描述描述基本形态基本形态基本操作实现基本操作实现用一组地址连续地址连续的存储单元依次存放依次存放线性表中的数据元素。采用这种存储结构的线性表叫做顺序表顺序表。 a1 a2 ai-1 ai an基地址基地址1.数据元素在“逻辑逻辑关系上的相邻相邻”用“物理地址相邻物理地址相邻”来表示。2.顺序表中任一元素都可“随机存取随机存取”。typedef struct SqList; / 俗称 顺序顺序表表#define MAXSIZE 100 / 线性表存储空间的分配量,即数组长度ElemType elemMAXSIZE; int length; / 当前长度顺序表的
4、C描述顺序表空:条件顺序表空:条件 L.length=0 不允许删除操作顺序表满:顺序表满: 条件 L.length=MAXSIZE 不允许插入操作不空也不满:不空也不满: 可以插入,删除操作顺序表的基本形态顺序表- 基本算法根据顺序表的实现形式,表长根据顺序表的实现形式,表长length是类型定义是类型定义的属性,可以实现求表长、初始化、取值、判空的属性,可以实现求表长、初始化、取值、判空等操作,时间复杂度均为等操作,时间复杂度均为O(1)。而遍历算法、查找表中元素的存在、插入、删除而遍历算法、查找表中元素的存在、插入、删除等操作,时间复杂度均为等操作,时间复杂度均为O(n)。(1)初始化空
5、表时间复杂为:O(1)顺序表- 基本算法L.length=0; (2)判空时间复杂为:O(1)顺序表- 基本算法if(L.length=0)return OK;else return ERROR;(3)求表长时间复杂为:O(1)顺序表- 基本算法return L.length;(4)取元素(取第i个元素e)时间复杂为:O(1)顺序表- 基本算法e=L.elemi-1; i合法if(i=1&i=L.length)e=L.elemi-1;return OK;else return ERROR;顺序表- 基本算法(5)遍历for ( i=1; i=L.length; i+ ) visit(
6、L.elemi-1 );时间复杂为:O(L.length)顺序表- 基本算法(6)查找搜索顺序表中是否存在指定的数据元素。存在,查找成功;否则,查找失败。例如:顺序表23 75 41 38 54 62 17L.elem0L.length-1e =38i 1 2 3 4 1 850可见,基本操作是:将顺序表中的元素逐个和给定值 e 相比较。算法的算法的时间复杂度时间复杂度为:为: O( L.length )int LocateElem(SqList L,Elemtype e)for(i=1 ;i=L.length;i+)if(e=L.elemi-1)return i;return 0;顺序表-
7、基本算法(7)插入在顺序表中插入指定的数据元素,插入成功,表长增1。线性表操作 ListInsert(&L, i, e)的实现:首先分析首先分析:插入元素时,线性表的逻辑结构逻辑结构发生什么变化发生什么变化? (a1, , ai-1, ai, , an) 改变为 (a1, , ai-1, e, ai, , an)a1 a2 ai-1 ai ana1 a2 ai-1 ai ean, 表的长度增加 必备条件:表存在且不满 i值的合法性检查:1L.length+1 将第i个到最后1个元素依次后移一个位置; 在i个位置插入元素; 表长增加1 。分析分析:21 18 30 75 42 56 87
8、21 18 30 75例如:ListInsert_Sq(L, 5, 66) L.length-1087564266O( L.length )算法的算法的时间复杂度时间复杂度为:为:Status ListInsert ( SqList &L, int i, ElemType e) if ( i=1&i=i; j- ) /元素后移L.elemj = L.elemj-1; L.elemi-1 = e; / 插入e L.length+; / 表长增1 return OK; / 插入成功 elsereturn ERROR; 插入算法时间复杂度分析:插入算法时间复杂度分析: 考虑移动元素的
9、平均情况考虑移动元素的平均情况插入位置插入位置需要移动的结点次数需要移动的结点次数1n2n-1n1n+10平均次数平均次数:(1+2+n-1+n)/(n+1)=n/2T(n)=O(n)顺序表- 基本算法(8)删除在顺序表中删除指定位置的数据元素,删除成功,表长减1。线性表操作 ListDelete(&L, i, &e)的实现:首先分析:删除元素时,线性表的逻辑结构发生什么变化? (a1, , ai-1, ai, ai+1, , an) 改变为 (a1, , ai-1, ai+1, , an)ai+1 an, 表的长度减少a1 a2 ai-1 ai ai+1 ana1 a2 ai
10、-1 必备条件:表非空 i值的合法性检查:1L.length 取出第i个元素; 第i个元素以后的元素向前移动一个位置; 表长减小1 。分析分析:21 18 30 75 42 56 8721 18 30 75L.length-10pppq8756例如:ListDelete_Sq(L, 5, e) p算法时间复杂度为算法时间复杂度为: : O( L.length)Status ListDelete ( SqList &L, int i, ElemType &e) if ( i=1&i=L.length )e=L.elemi-1; for ( j=i+1; j=L.lengt
11、h; j+ ) /元素前移L.elemj-2 = L.elemj-1; L.length-; / 表长减1 return OK; / 删除成功 elsereturn ERROR; 删除算法时间复杂度分析:删除算法时间复杂度分析: 考虑移动元素的平均情况考虑移动元素的平均情况删除位置删除位置需要移动的结点次数需要移动的结点次数1n-12n-2n0平均次数平均次数:(0+1+n-11)/n=(n-1)/2T(n)=O(n)时间复杂度为O(1)顺序表- 基本算法(9)求前驱pre=L.elemi-2; 在顺序表中查找元素cur_e,位序为ii=LocateElem(L,cur_e);cur_e是顺序
12、表中元素,但不是第一个元素便有直接前驱pre 顺序表- 基本算法(10)求后继next=L.elemi;在顺序表中查找元素cur_e,位序为ii=LocateElem(L,cur_e);cur_e是顺序表中元素,但不是最后一个元素便有直接后继next时间复杂度为O(1)顺序表- 经典算法分析n n1 1i i2 21 1n ni i) )( (n nn n1 1算法插入删除基本操作移动元素移动元素平均移动次数时间复杂度O(nO(n) )O(nO(n) )最好情况在n+1处插入,不需移动删除第n个,不需移动1 1n n1 1i i2 2n n1 1) )i i( (n n1 1n n1 1线性表
13、应用举例例例1 1:合并线性表:合并线性表例例2 2:归并线性表:归并线性表例1:合并线性表假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即:线性表中的数据元素即为集合中的成员。现要求一个新的集合AAB。去掉重复元素去掉重复元素扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。问题分析问题分析:1从线性表LB中依次取得每个数据元素;2依值在线性表LA中进行查访; 3若不存在,则插入之。GetElem(LB, i)e LocateElem(LA, e, equal( ) ListInsert(LA, n+1, e)操作步骤:操作步骤:
14、 GetElem(Lb, i, e); / 取取Lb中第中第i个数据元素赋给个数据元素赋给e if (!LocateElem(La, e, equal( ) ) ListInsert(La, +La_len, e); / La中不存在和中不存在和 e 相同的数据元素,则插入之相同的数据元素,则插入之void union(List &La, List Lb) La_len = ListLength(La); / 求线性表的长度求线性表的长度 Lb_len = ListLength(Lb); for (i = 1; i = Lb_len; i+) / union算法分析时间复杂度:时间复杂
15、度:O(O(ListLength(LAListLength(LA) )* *ListLength(LBListLength(LB) ) )空间复杂度:空间复杂度:O(O(1 1) )例2:归并线性表已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。 不去掉重复元素不去掉重复元素 LC中的数据元素或是LA中的数据元素,或是LB中的数据元素。则先设LC为空表,然后将LA或LB中的元素逐个插入到LC中。为使LC表按值非递减有序排列,可设两个整型变量i、j,分别指向LA和LB,比较i、j所指元素的大小,决定哪个元素插
16、入LC。插入后,在LA 或LB 中顺序后移。问题分析问题分析:void MergeList(List La, List Lb, 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 = L
17、istLength(Lb); GetElem(La, i, ai); GetElem(Lb, j, bj); if(ai=bj) ListInsert(Lc, +k, ai); +i; else ListInsert(Lc, +k, bj); +j; 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); / 插入插
18、入 Lb 表中剩余元素表中剩余元素算法分析时间复杂度:时间复杂度:O(O(ListLength(LA)ListLength(LA)+ +ListLength(LBListLength(LB) ) )空间复杂度:空间复杂度:O(O(ListLength(LA)ListLength(LA)+ +ListLength(LBListLength(LB) ) )void MergeList(SqList La,SqList Lb,SqList &Lc)pa=La.elem;pb=Lb.elem;Lc.length =La.length+Lb.length;pc=Lc.elem;pa_last=La.elem+La.length-1;pb_last=Lb.elem+Lb.length-1;while(pa=pa_last&pb=pb_last)if( *pa=*pb )*pc+ =*pa+;else*pc+ = *pb+;while(pa=pa_last)*pc+=*pa+;while(pb=pb_last)*pc+=*pb+;if( *pa*pb )*pc+ =*pa+;else if(*pa=*pb)*pc+=*pa+;pb+;else*pc+ = *pb+;一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 艺人代理协议书
- 装卸转运协议书
- 装潢房子协议书
- 自用船转让协议书
- 异业合同协议书
- 希腊外贸协议书
- 2025广西百色西林县句町咖啡发展贸易有限公司冬季招聘工作人员3人考试核心题库及答案解析
- 长期员工合同协议书
- 意甲降薪协议书
- 小组用工协议书
- 国家自然科学基金申报培训
- 统编版四年级上册语文期末专题复习课件2-6-文言文之超级访问
- 湘少版英语-6年级上册-单词表(带音标)
- 新概念英语第一册随堂练习-Lesson53~54 有答案
- 广东省深圳市龙岗区外国语学校2024-2025学年九年级上学期期中历史试题
- 2020年智慧树知道网课《非英语国家文化(山东联盟)》课后章节测试满分答案
- 壅水计算完整版本
- 07FJ02防空地下室建筑构造
- 外研版(三起)(2024)三年级上册英语Unit 2 My school things单元测试卷(含答案)
- 化工建设综合项目审批作业流程图
- 马工程《经济法学》教学
评论
0/150
提交评论