理解线性表的逻辑结构特性.ppt
《理解线性表的逻辑结构特性.ppt》由会员分享,可在线阅读,更多相关《理解线性表的逻辑结构特性.ppt(89页珍藏版)》请在三一办公上搜索。
1、1,第二章 线性表,重点:理解线性表的逻辑结构特性熟练掌握线性表的顺序存储结构的描述方法,以及在该存储结构下的基本操作熟练掌握线性表的链式存储结构的描述方法,灵活使用单链表、双链表、循环链表,学会在相应存储结构下实现其各种基本算法及相关的时间性能分析一元多项式的表示和相加,2,第二章 线性表,难点:能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其应用场合使用本章所学的基本知识设计有效算法,解决与线性表相关的应用问题,3,第二章 线性表,2.1 线性表的类型定义2.2 线性表的顺序表示和实现2.3 线性表的链式表示和实现 2.3.1 线性链表 2.3.2 循环链表 2.3.3
2、 双向链表2.4 一元多项式的表示及相加,4,第二章 线性表,线性结构的特点:在数据元素的非空有限集中,1)存在唯一的一个被称为“第一个”的数据元素2)存在唯一的一个被称为“最后一个”的数据元素3)除第一个之外,集合中的每个数据元素均只有一个前驱4)除最后一个之外,集合中的每个数据元素均只有一个后继,5,1.线性表:定义:简称为表,是零个或多个元素的有穷序列,通常可以表示成(a1,a2,an)(n 0)表的长度:表中所含元素的个数 n空表:长度为零的表表项:表中的元素 ai位序:数据元素 ai 在线性表中的位置,2.1 线性表的类型定义,6,1.线性表:线性表中的数据元素在不同的情况下可以有不
3、同的具体含义,它可以是一个数、一个符号,也可是其它更复杂的信息例1.26个字母(A,B,Z)例2.班级人数(33,32,35,30)例3.学生情况登记表:数据元数为记录,有若干个数据项组成(如姓名,学号,性别,年龄),2.1 线性表的类型定义,7,2.线性表的特点:线性表中的数据元素是各种各样的,但同一线性表中的元素必定具有相同特性,即属于同一数据对象相邻数据元素之间存在序偶关系(a1,a2,ai-1,ai,ai+1,an)ai-1是 ai的直接前驱元素,ai+1是ai的直接后继元素相当灵活,长度可以增长或缩短,2.1 线性表的类型定义,8,3.线性表的基本运算在线性表中插入一个元素;在线性表
4、中删除某个元素;在线性表中查找某个特定元素;在线性表中查找某个元素的后继元素;在线性表中查找某个元素的前驱元素;创建空线性表;判别一个线性表是否为空表。由基本运算可以构成其它较为复杂的运算,2.1 线性表的类型定义,9,4.抽象数据类型线性表的定义(P19)ADT List 数据对象:D=ai|aiElemSet,i=1,2,n,n 0 数据关系:R1=|ai-1,ai D,i=1,2,n 基本操作:InitList(&L)操作结果:构造一个空的线性表L DestroyList(&L)初始条件:线性表L已存在 操作结果:销毁线性表,2.1 线性表的类型定义,10,4.抽象数据类型线性表的定义(
5、P19)ClearList(&L)初始条件:线性表L已存在 操作结果:将线性表L重置为空表 ListEmpty(L)初始条件:线性表L已存在 操作结果:若L为空表,则返回TRUE,否则返回FALSE ListLength(L)初始条件:线性表L已存在 操作结果:返回L中数据元素个数,2.1 线性表的类型定义,11,4.抽象数据类型线性表的定义(P19)GetElem(L,i,&e)初始条件:线性表L已存在,1iLengthList(L)操作结果:用e返回L中第i个元素的值 LocateElem(L,e,compare()初始条件:线性表L已存在,compare()是元素判定 函数 操作结果:返
6、回L中第1个与e满足关系compare()的 元素的位序。若这样的元素不存在,则 返回值为0 PriorElem(L,cur_e,&pre_e)初始条件:线性表L已存在 操作结果:若cur_e是L的元素,但不是第一个,则 用pre_e 返回它的前驱,否则操作失败,pre_e无定义,2.1 线性表的类型定义,12,4.抽象数据类型线性表的定义(P19)NextElem(L,cur_e,&next_e)初始条件:线性表L已存在 操作结果:若cur_e是L的元素,但不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义 ListTraverse(L,visit()初始条件:线性
7、表L已存在 操作结果:依次对L的每个元素调用函数visit()。一 旦visit()失败,则操作失败 PutElem(L,i,&e)初始条件:线性表L已存在,1iLengthList(L)操作结果:L中第i个元素赋值同e的值,2.1 线性表的类型定义,13,4.抽象数据类型线性表的定义(P19)ListInsert(&L,i,e)初始条件:线性表L已存在,1iLengthList(L)+1 操作结果:在L的第i个元素之前插入新的元素e,L 的长度增1 ListDelete(&L,i,&e)初始条件:线性表L已存在且非空,1iLengthList(L)操作结果:删除L的第i个元素,并用e返回其值
8、,L 的长度减1 ADT List,2.1 线性表的类型定义,14,例2-1 假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合AAB。上述问题等价于:要求对线性表作如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。分下列三步进行:1)从线性表LB中依次取得每个数据元素;2)依值在线性表LA中进行查访;3)若不存在,则插入之。,2.1 线性表的类型定义,15,用C语言描述得如下算法:void union(List/La中不存在和 e 相同的数据元素,则插入之/union算法 2.1,
9、2.1 线性表的类型定义,16,例2-2 已知一个非纯集合 B,试构造集合A,要求集合A中只包含集合B中所有值不相同的数据元素解法一:同上,分别以线性表LA和LB表示集合A和B,则首先初始化线性表LA为空表,之后的操作和例2-1完全相同解法二:仍以线性表表示集合。只是求解之前先对线性表LB中的数据元素进行排序,即线性表LB中的数据元素依其值从小到大有序排列,则值相同的数据元素必相邻。则上述操作中的第二步就不需要进行从头至尾的查询,2.1 线性表的类型定义,17,用C语言描述得如下算法:void purge(List/for/purge算法 2.2,2.1 线性表的类型定义,18,例2-3 归并
10、两个“其数据元素按值非递减有序排列的”线性表LA和LB,求得线性表LC也具有同样特性void MergeList(List La,List Lb,List,2.1 线性表的类型定义,19,if(ai=bj)ListInsert(Lc,+k,ai);+i;else ListInsert(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);/merge_list算法 2.3,2.1 线性表的类型定义,20,假设
11、:GetElem和ListInsert这两个操作的执行时间和表长无关,LocateElem的执行时间和表长成正比,则算法2.1的时间复杂度为 O(ListLength(LA)ListLength(LB);例2-2(解法一)的时间复杂度为 O(ListLength2(LB);算法2.2的时间复杂度为 O(ListLength(LB);可见,不同的算法策略所得不同算法的时间复杂度不同。算法2.3的时间复杂度为 O(ListLength(LA)ListLength(LB),2.1 线性表的类型定义,21,线性表的顺序表示:以元素在计算机内存中的“物理位置相邻”来表示线性表中数据元素之间的逻辑关系,如
12、下所示:Locate(ai+1)=Locate(ai)+sizeof(DataType)Locate(ai)=Locate(a0)+sizeof(DataType)*i只要确定了首地址,线性表中任意数据元素都可以随机存取称第一个数据元素的存储地址为线性表的起始地址,称作线性表的基地址,2.2 线性表的顺序表示和实现,22,线性表的顺序存储结构示意图,2.2 线性表的顺序表示和实现,23,2.2 线性表的顺序表示和实现,顺序表的定义:在C语言中可以用一维数组表示 const LIST_INIT_SIZE=100;/表初始分配空间 const LISTINCREMENT=10;/空间分配增量基址
13、typedef struct ElemType*elem;/存储空间 int length;/当前长度 int listsize;/当前存储容量 int incrementsize;/空间分配增量 SqList;,24,2.2 线性表的顺序表示和实现,Status InitList_Sq(SqList/InitList_Sq,25,2.2 线性表的顺序表示和实现,根据顺序表的存储特点,顺序表的基本运算:1.int insert_sq(SqList palist,DataType x,int p)在palist所指顺序表中下标为p的位置上插入一个值为x的元素,并返回插入成功与否的标志。此运算在0
14、pn时有意义2.int delete_sq(SqList palist,int p)在palist所指顺序表中删除下标为p的元素,并返回删除成功与否的标志。此运算在0pn时有意义,26,2.2 线性表的顺序表示和实现,根据顺序表的存储特点,顺序表的基本运算:3.int first_sq(SqList palist)求palist所指顺序表中第一个元素的下标。当palist为空表时返回一个特殊的下标值-14.int locate_sq(SqList palist,DataType x)在palist所指顺序表中寻找值为 x 的元素的下标,若palist中不存在值为 x 的元素,则返回一个特殊的下
15、标值-1,27,2.2 线性表的顺序表示和实现,根据顺序表的存储特点,顺序表的基本运算:5.DataType retrieve_sq(SqList palist,int p)在palist所指顺序表中,寻找下标为 p(0pn)的元素,并将该元素的值作为函数值返回,若palist中无下标为的元素,则返回一个特殊的值6.int next_sq(SqList palist,int p)求palist所指顺序表中下标为 p 的元素的后继元素下标,当不存在下标为 p 的元素或虽有该元素但无后继时,返回一个特殊的下标值-1,28,2.2 线性表的顺序表示和实现,根据顺序表的存储特点,顺序表的基本运算:7.
16、int previous_sq(SqList palist,int p)求palist所指顺序表中下标为 p 的元素的前驱元素下标,当不存在下标为 p 的元素,或虽有该元素但无前驱时,本函数返回一个特殊的下标值-18.void createNullList_sq(SqList palist)置palist所指顺序表为空表9.int isNullList_sq(SqList palist)判别palist所指顺序表是否为空表。若为空则返回1,否则返回0,29,2.2 线性表的顺序表示和实现,Status ListInsert_Sq(SqList,30,31,32,2.2 线性表的顺序表示和实现,
17、q=/ListInsert_Sq,33,2.2 线性表的顺序表示和实现,Status ListDelete_Sq(SqList/ListDelete_Sq,34,2.2 线性表的顺序表示和实现,插入元素时的时间效率:设pi是在第i个元素之前插入一个元素的概率,则在长度为n的线性表中插入一个元素时所需移动元素的次数的期望值(平均次数)为:,设,则有,35,2.2 线性表的顺序表示和实现,删除元素时的时间效率:设qi是删除第i个元素的概率,则在长度为n的线性表中删除一个元素时所需移动元素的次数的期望值(平均次数)为:,设,则有,36,2.2 线性表的顺序表示和实现,两个顺序表的合并void Mer
18、geList_Sq(SqList la,SqList lb,SqList,37,2.2 线性表的顺序表示和实现,while(pa=pa_last/插入lb的剩余元素/End of MergeList_Sq(),38,2.2 线性表的顺序表示和实现,例:设计一个算法,用尽可能少的辅助空间将顺序表中前m个元素和后n个元素进行整体互换。即将线性表(a1,a2,am,b1,b2,bn)改变成(b1,b2,bn,a1,a2,am)分析:取一临时空间,将b1放入临时空间,a1-am全部后移一个位置,如此b2,直到bn.特点:牺牲时间节省空间 分析:另外申请空间m+n个元素单元,将b,a分别写入。时间将为n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 理解 线性 逻辑 结构 特性

链接地址:https://www.31ppt.com/p-6367530.html