《数据结构线表》PPT课件.ppt
《《数据结构线表》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据结构线表》PPT课件.ppt(115页珍藏版)》请在三一办公上搜索。
1、数据结构-线性表,齐 恒大黑楼 B0912,什么是云计算?,云计算定义,云计算(Cloud Computing):是分布式处理(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。是指基于互联网的超级计算模式-即把存储于个人电脑、移动电话和其他设备上的大量信息和处理器资源集中在一起,协同工作。在极大规模上可扩展的信息技术能力向外部客户作为服务来提供的一种计算方式。,40多亿的移动电话一 2010年 数据来源:Nokia,个人电脑和笔记本电脑,企业电脑和服务器,PDA
2、,云计算综述,数据在云端:不怕丢失,不必备份,可以任意点的恢复;软件在云端:不必下载自动升级;无所不在的计算:在任何时间,任意地点,任何设备登录后就可以进行计算服务;无限强大的计算:具有无限空间的,无限速度。,硬件为中心,软件为中心,服务为中心,云计算发展路线,并行计算,集群计算,网格计算,云计算,云计算体系特点,通过Internet接入不需要自身具有IT技术来实施第三方提供资源共享无多余功能开发无多余费用系统延续性好,Cloud Applications(“Software-as-a-Service”),Cloud Platforms(“Platform-as-a-Service”),Clo
3、ud Storage,Cloud Servers(“Infrastructure-as-a-Service”),云计算三种服务方式,SAAS(Software as a Service)PAAS(Platform as a Service)IAAS(Infrastructure as a Service),1.1 什么是数据结构1.2 基本概念和术语1.3 抽象数据类型的表示与实现1.4 算法的描述和算法分析,第一章回顾,什么是数据结构描述非数值计算问题的数学模型不是数学方程,而是树、表和图之类的数据结构。数据结构描述现实世界实体的数学模型及其上的操作在计算机中的表示和实现。,基本概念和术语数
4、据(Data)数据元素(Data element)数据项(Data item)数据对象(Data Object)数据结构(Data Structure)-带结构的数据元素的集合。包括数据的逻辑结构和数据的存储结构。,抽象数据类型(Abstract Data Type 简称ADT),是指一个数学模型以及定义在此数学模型上的一组操作。e.g.矩阵(求转置、加、乘、逆、特征值),算法的描述和算法分析一、算法(algorithm)解决某一特定问题的具体步骤的描述,是指令的有限序列。有穷性、确定性、可行性、有输入、有输出,二、算法设计的原则,设计算法时,通常应考虑达到以下目标:,1 正确性,2.可读性,
5、3 健壮性,4 高效率与低存储量需求,三、算法分析,算法=控制结构+原操作(固有数据类型的操作),算法的执行时间=原操作(i)的执行次数原操作(i)的执行时间,第二章线性表,线性结构的基本特征为:,1集合中必存在唯一的一个“第一元素”;,2集合中必存在唯一的一个“最后元素”;,3除最后元素在外,均有 唯一的后继;,4除第一元素之外,均有 唯一的前驱。,是一个数据元素的有序(次序)集,2.1 线性表的类型定义,2.3 线性表类型的实现 链式映象,2.4 一元多项式的表示,2.2 线性表类型的实现 顺序映象,2.1线性表的类型定义,抽象数据类型线性表的定义如下:,ADT List,数据对象:,D
6、ai|ai ElemSet,i=1,2,.,n,n0 称 n 为线性表的表长;称 n=0 时的线性表为空表。,数据关系:,R1|ai-1,aiD,i=2,.,n,/设线性表为(a1,a2,.,ai,.,an),/称 i 为 ai 在线性表中的位序。,基本操作:,结构初始化操作,结构销毁操作,引用型操作,加工型操作,ADT List,InitList(&L),操作结果:,构造一个空的线性表L。,初始化操作,结构销毁操作,DestroyList(&L),初始条件:操作结果:,线性表 L 已存在。,销毁线性表 L。,ListEmpty(L),ListLength(L),PriorElem(L,cur
7、_e,&pre_e),NextElem(L,cur_e,&next_e),GetElem(L,i,&e),LocateElem(L,e,compare(),ListTraverse(L,visit(),引用型操作:,ListEmpty(L),初始条件:操作结果:,线性表L已存在。,若L为空表,则返回TRUE,否则FALSE。,(判断线性表是否为空),ListLength(L),初始条件:操作结果:,线性表L已存在。,返回L中元素个数。,(求线性表的长度),PriorElem(L,cur_e,&pre_e),初始条件:操作结果:,线性表L已存在。,若cur_e是L的元素,但不是第一个,则用pre
8、_e 返回它的前驱,否则操作失败,pre_e无定义。,(求数据元素的前驱),NextElem(L,cur_e,&next_e),初始条件:操作结果:,线性表L已存在。,若cur_e是L的元素,但不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义。,(求数据元素的后继),GetElem(L,i,&e),初始条件:操作结果:,线性表L已存在,且 1iLengthList(L)。,用e返回L中第i个元素的值。,(求线性表中某个数据元素),LocateElem(L,e,compare(),初始条件:操作结果:,线性表L已存在,e为给定值,compare()是元素判定函数。,返
9、回L中第1个与e满足关系compare()的元素的位序。若这样的元素不存在,则返回值为0。,(定位函数),ListTraverse(L,visit(),初始条件:操作结果:,线性表L已存在,Visit()为某个访问函数。,依次对L的每个元素调用函数visit()。一旦visit()失败,则操作失败。,(遍历线性表),加工型操作,ClearList(&L),PutElem(&L,i,&e),ListInsert(&L,i,e),ListDelete(&L,i,&e),ClearList(&L),初始条件:操作结果:,线性表L已存在。,将L重置为空表。,(线性表置空),PutElem(&L,i,&
10、e),初始条件:操作结果:,线性表L已存在,且 1iLengthList(L)。,L中第i个元素赋值为e的值。,(改变数据元素的值),ListInsert(&L,i,e),初始条件:操作结果:,线性表L已存在,且 1iLengthList(L)+1。,在L的第i个元素之前插入新的元素e,L的长度增1。,(插入数据元素),ListDelete(&L,i,&e),初始条件:操作结果:,线性表L已存在且非空,1iLengthList(L)。,删除L的第i个元素,并用e返回其值,L的长度减1。,(删除数据元素),利用上述定义的线性表操作 可以实现其它更复杂的操作,假设:有两个集合 A 和 B,分别用两
11、个线性表 LA 和 LB 表示,即:线性表中的数据元素即为集合中的成员。现要求一个新的集合AAB。,例 2-1,要求对线性表作如下操作:扩大线性表 LA,将存在于LB 中而不存在于LA 中的数据元素逐个插入到LA 中去。,上述问题可演绎为:,1从线性表LB中依次察看每个数据元素;,2依值在线性表LA中进行查访;,3若不存在,则插入之。,GetElem(LB,i)e,LocateElem(LA,e,equal(),ListInsert(LA,n+1,e),操作步骤:,GetElem(Lb,i,/La中不存在和 e 相同的数据元素,则插入之,void union(List,for(i=1;i=Lb
12、_len;i+),/union,已知一个允许包含重复元素的集合 B,试构造一个不允许包含重复元素的集合 A,使 A中只包含 B 中所有值各不相 同的数据元素。,仍选用线性表表示集合。,例 2-2,从集合 B 取出物件放入集合 A要求集合A中同样物件不能有两件以上,因此,算法的策略应该和例2-1相同,上述问题可演绎为:,void union(List&La,List Lb)/union,GetElem(Lb,i,/La中不存在和 e 相同的数据元素,则插入之,for(i=1;i=Lb_len;i+),InitList(La);/构造(空的)线性表LALa_len=ListLength(La);L
13、b_len=ListLength(Lb);,若线性表中的数据元素相互之间可以比较,并且数据元素在线性表中依值非递减或非递增有序排列,即 aiai-1 或 aiai-1(i=2,3,n),则称该线性表为有序表(Ordered List)。,试改变结构,以有序表表示集合。,例如:(2,3,3,5,6,6,6,8,12),对集合 B 而言,值相同的数据元素必定相邻;,对集合 A 而言,数据元素依值从小至大的顺序插入。,因此,数据结构改变了,解决问题的策略也相应要改变。,void purge(List i+)/purge,GetElem(Lb,i,/La中不存在和 e 相同的数据元素,则插入之,例2-
14、3,将A、B两个有序表合并成有序表C仍采用线性表表示,void MergeList(List La,List Lb,List&Lc)/本算法将非递减的有序表 La 和 Lb 归并为 Lc/merge_list,while(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);,/La 和 Lb 均非空,i=j=1,k=0 GetEle
15、m(La,i,ai);GetElem(Lb,j,bj);if(ai=bj)/将 ai 插入到 Lc 中 ListInsert(Lc,+k,ai);+i;else/将 bj 插入到 Lc 中 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);/插入 Lb 表中剩余元素,2.2线性表类型的实现顺序映像,最简单的一种顺序映象方法
16、是:令 y 的存储位置和 x 的存储位置相邻。,顺序映象,以 x 的存储位置和 y 的存储位置之间某种关系表示逻辑关系。,用一组地址连续的存储单元 依次存放线性表中的数据元素,a1 a2 ai-1 ai an,线性表的起始地址称作线性表的基地址,以“存储位置相邻”表示有序对 即:LOC(ai)=LOC(ai-1)+C C为一个数据元素所占存储量,所有数据元素的存储位置均取决于 第一个数据元素的存储位置 LOC(ai)=LOC(a1)+(i-1)C 基地址,顺序映像的 C 语言描述,typedef struct SqList;/俗称 顺序表,#define LIST_INIT_SIZE 80/线
17、性表存储空间的初始分配量#define LISTINCREMENT 10/线性表存储空间的分配增量,ElemType*elem;/存储空间基址,int length;/当前长度,int listsize;/当前分配的存储容量/(以sizeof(ElemType)为单位),线性表的基本操作在顺序表中的实现,InitList(&L)/结构初始化,LocateElem(L,e,compare()/查找,ListInsert(&L,i,e)/插入元素,ListDelete(&L,i)/删除元素,Status InitList_Sq(SqList&L)/构造一个空的线性表/InitList_Sq,算法时
18、间复杂度:,O(1),L.elem=(ElemType*)malloc(LIST_INIT_SIZEsizeof(ElemType);If(!L.elem)exit(OVERFLOW);,L.length=0;L.listsize=LIST_INIT_SIZE;return OK;,int LocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType)/在顺序表中查询第一个满足判定条件的数据元素,/若存在,则返回它的位序,否则返回 0/LocateElem_Sq,O(ListLength(L),算法的时间复杂度为:,i
19、=1;/i 的初值为第1个元素的位序p=L.elem;/p 的初值为第1个元素的存储位置,while(i=L.length,if(i=L.length)return i;else return 0;,线性表操作 ListInsert(&L,i,e)的实现:,首先分析:,插入元素时,线性表的逻辑结构发生什么变化?,Status ListInsert_Sq(SqList&L,int i,ElemType e)/在顺序表L的第 i 个元素之前插入新的元素e,/i 的合法范围为 1iL.length+1/ListInsert_Sq,算法时间复杂度为:,O(ListLength(L),q=,if(L.l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构线表 数据结构 PPT 课件

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