电子课件-数据结构(Java版)-.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《电子课件-数据结构(Java版)-.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 课件 数据结构 Java
- 资源描述:
-
1、上课啦THE POWERPOINT TEMPALTE模块1 概述什么是数据结构1相关概念和术语2研究内容3数据类型与抽象数据类型4算法及其性能分析5学习目的与要求重点:理解数据结构的各种基本概念和术语理解线性结构、层次结构和网状结构的结构特点理解数据的逻辑结构、存储结构及运算三方面的概念及相互关系难点:掌握算法性能(时间和空间)的分析方法。1.1 什么是数据结构程序设计的过程,一般遵循以下解决步骤:程序设计的过程,一般遵循以下解决步骤:数值问题 数学方程式非数值问题 设计合理的数据结构(表、树、图等)分析问题分析问题建立数学模型建立数学模型设计算法设计算法编写代码编写代码数据结构数据结构是一门
2、研究非数值计算程序设计问题中的操作对象,以及是一门研究非数值计算程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。它们之间的关系和操作等相关问题的学科。数据结构的3种基本结构-线性结构 线性结构线性结构实例:学生信息管理系统数据结构的3种基本结构-树结构 树结构树结构实例:八皇后问题数据结构的3种基本结构-图结构 图结构图结构实例:田径赛的时间安排问题1.2 数据结构的相关概念和术语 数据(数据(Data)数据是计算机可以操作的对象,是能被计算机识别并处理的描述客观事物的符号集合。数据不仅仅包括整数、实数等数值类型,也包括字符、文字、图形图像、视频、声音等非数值类型。数据元素
3、(数据元素(Data Element)数据元素是组成数据的基本单位,是计算机程序加工处理的基本单位,在计算机中通常作为一个整体进行考虑和处理。数据项(数据项(Data Item)数据项(Data Item)是有独立含义的最小单位。一个数据元素可由一个或多个数据项组成,此时的数据元素通常称为记录(Record)。数据对象(数据对象(Data Object)数据对象是性质相同的数据元素的集合,是数据的一个子集。数据的三个层次数据的三个层次例如:表例如:表1.1所示,学生信息表是所示,学生信息表是数据数据,一行表示一个学生的记录,每一条记录就是一个,一行表示一个学生的记录,每一条记录就是一个数据数据
4、元素元素,每一个数据元素都是由学号、姓名、性别、出生日期、政治面貌,每一个数据元素都是由学号、姓名、性别、出生日期、政治面貌5个个数据项数据项组成。组成。1.3 数据结构的研究内容 逻辑结构:数据元素之间的逻辑关系。存储结构:数据元素及其关系在计算机存储器内的表示。数据的运算:即对数据施加的操作。1.3 数据结构的研究内容-逻辑结构 四种基本数据结构关系图四种基本数据结构关系图1.3 数据结构的研究内容-存储结构数据的存储结构顺序存储:逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现.借助于语言的数组来实现。链式存储:不要求逻辑上相邻的结点物理上也相
5、邻,结点间的逻辑关系是由附加的指针字段表示的,在java中使用“对象引用”来实现指针。1.3 数据结构的研究内容-存储结构顺序存储结构链式存储结构1.3 数据结构的研究内容-存储结构1536元素元素2 21400元素元素1 11346元素元素3 3 元素元素4 41345h存储地址存储地址 存储内容存储内容 指针指针 13451345 元素元素1 1 14001400 13461346 元素元素4 4 .14001400 元素元素2 2 15361536 .15361536 元素元素3 3 13461346 链式存储链式存储 h1.4 数据类型与抽象数据类型数据类型(Data Type)数据类
6、型是指一组性质相同的值的集合以及在此集合上定义的一组操作的总称。通常数据类型可以看作是程序设计语言中已实现的数据结构。数据类型是按照值的不同进行划分的。在高级语言中,每个变量、常量和表达式都有各自的取值范围。类型就用来说明变量或表达式的取值范围和所能进行的操作。按“值”是否可分解,可将数据类型划分为两类:(1)原子类型:其值不可分解。通常是由语言直接提供。如JAVA语言的整型、实型、字符型等基本类型;(2)结构类型:其值可分解为若干个成分(或称为分量)。是用户借助于语言提供的描述机制自己定义的,它通常是由标准类型派生的,故它也是一种导出类型。如JAVA语言的数组。1.4 数据类型与抽象数据类型
7、抽象数据类型(抽象数据类型(Abstract Data Type简称简称ADT)抽象数据类型是指一个数学模型及定义在该模型上的一组操作。抽象数据类型可以看作是数据的逻辑结构及其在逻辑结构上定义的操作,而与其在计算机内部如何表示和实现无关。抽象数据类型可以看作是描述问题的模型,它独立于具体实现。它的优点是将数据和操作封装在一起,使得用户程序只能通过在ADT里定义的某些操作来访问其中的数据,从而实现了信息隐藏。在JAVA中,我们可以用类的说明来表示ADT,用类的实现来实现ADT。因此,JAVA中实现的类相当于是数据的存储结构及其在存储结构上实现的对数据的操作。ADT和类的概念实际上反映了程序或软件
8、设计的两层抽象:ADT相当于是在概念层(或称为抽象层)上描述问题,而类相当于是在实现层上描述问题。此外,JAVA中的类只是一个由用户定义的普通类型,可用它来定义变量(称为对象或类的实例)。因此,在JAVA中,最终是通过操作对象来解决实际问题的,所以我们可将该层次看作是应用层。例如,main程序就可看作是用户的应用程序。1.5 算法与性能分析-算法的特性算法的特性(1)有穷性:有限步骤之内正常结束,不能形成无穷循环,并且每一步骤在可接受的时间内完成。这里的有穷的概念并不是纯数学意义的,而是在实际应用当中合理的、可以接受的“有边界”。(2)确定性:算法中的每一个步骤必须有确定含义,无二义性。(3)
9、输入:有多个或0个输入。(4)输出:至少有一个或多个输出。(5)可行性:算法的每一步操作可通过已经实现的基本运算执行有限次而完成。1.5 算法与性能分析-算法的设计要求算法的设计要求1.正确性 程序中不含语法错误、算法的执行结果应当满足预先规定的功能和性能要求。2.可读性 一个好的算法首先应该便于人们理解和相互交流,其次才是机器可执行。可读性好的算法有助于人对算法的理解,难懂的算法易于隐藏错误且难于调试和修改。3.健壮性 一个好的算法,当输入的数据非法时,也能适当地做出正确反应或进行相应的处理,而不会产生一些莫名其妙的输出结果。4.高效率和低存储量 最后,好的算法还应该具备时间效率高和存储量低
10、的特点。时间效率指的是算法的执行时间,对于一个具体的问题的解决通常可以有多个算法,对于执行时间短的算法其效率就高。存储量需求指的是算法在执行过程中所需要的最大存储空间。这两者都与问题的规模有关。1.5 算法与性能分析-算法的性能分析时间复杂度程序中所有语句的频度(该语句重复执行的次数)之和构成即是由嵌套最深层次的语句频度决定的。假如,随着问题规模 n 的增长,算法执行时间的增长率和 f(n)的增长率相同,则可记作:T(n)=O(f(n)称T(n)为算法的(渐近)时间复杂度。1.5 算法与性能分析-算法的性能分析和算法执行时间相关的因素:算法选用的策略问题的规模编写程序的语言编译程序产生的机器代
11、码的质量计算机执行指令的速度1.5 算法与性能分析-算法的性能分析【例例1.5】求求1+2+3+100的三种算法分析的三种算法分析算法1的时间复杂度为O(n),我们称之为线性阶。算法2的时间复杂度为O(1),我们称之为常量阶。算法3的时间复杂度为O(n2),我们称之为平方阶。1.5 算法与性能分析-算法的性能分析空间复杂度算法的空间复杂度是指执行算法时所需的内存空间如果算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称此算法为原地空间,空间复杂度为o(1)。输入数据所占空间程序本身所占空间辅助变量所占空间算法的存储量1.6 小结 数据结构数据结构是指数据及数据之间的联系和这种联系在计算
12、机中的存储表示,包括数据的逻辑结构和存储结构。数据的逻辑结构逻辑结构是指各数据元素之间的逻辑关系,是用户按需要建立起来的,并呈现在用户面前的数据元素的结构形式。数据的存储结构存储结构是指数据在计算机内实际的存储形式。算法的设计算法的设计取决于数据的逻辑结构,算法的实现算法的实现依赖于采用的存储结构。算法算法是求解问题的步骤,它是指令的有限序列,其中一条指令表示一个或者多个操作。具有有穷性、确定性、可行性、有零个或多个输入和有一个或多个输出等特性。一个“好的”算法应达到正确性、易读性、健壮性和高效率与低存储量需求等目标。衡量一个算法的效率用时间复杂度来实现。THANKS上课啦THE POWERP
13、OINT TEMPALTE模块2线性表实例引入1逻辑结构2顺序存储结构3链式存储结构4应用举例5学习目的与要求重点:掌握顺序表和链表的逻辑描述和存储实现难点:顺序表和单链表的实现和应用线性结构线性结构的特点:线性结构的特点:在数据元素的非空有限集中,数据元素是有序的,排在某个数据元素b之前的数据元素a称为b的直接前驱直接前驱,而数据元素b称为a的直接后继直接后继。且具有如下特点:(1)存在唯一的一个被称为“第一个”的数据元素。(2)存在唯一的一个被称为“最后一个”的数据元素。(3)除第一个之外,集合中的每个数据元素均只有一个直接前驱。(4)除最后一个之外,集合中的每个数据元素均只有一个直接后继
14、。2.1 实例引入 【实例【实例1】银行办理业务时顾客的队列、26个英文字母表、班级同学的点名册、12生肖列表等都是线性结构。【实例【实例2】某学校成立了移动互联社团,今天招募社团人员,假设我们是社团负责记录报名信息的人员,我们需要做什么呢?2.2 线性表的逻辑结构定义:定义:具有相同数据类型的具有相同数据类型的 n n(0 0)个数据元素的有限序(个数据元素的有限序(次序次序)列。)列。记作记作(a1,a2,ai-1,ai,ai+1,an)其中其中,ai 是表中数据元素,是表中数据元素,n 是表长度是表长度,i为数据元素为数据元素ai 在线性表中的位序。在线性表中的位序。【例2.1】某班前五
15、名学生语文成绩(99,98,97,95,90)是线性表,表中每个数字是一个结点。【例2.2】一年四季(春,夏,秋,冬)是一个线性表,表中的结点是一个字符。2.2 线性表的逻辑结构【例2.3】学生成绩表是一个线性表,表中每一行(一条记录)是一个结点。一条记录是由学号、姓名、性别、数学成绩和语文成绩5个数据项组成。线性表的特点线性表的特点:n同一线性表中元素具有相同特性。同一线性表中元素具有相同特性。在在Java中,可以用类定义数据元素的数据类型。中,可以用类定义数据元素的数据类型。n相邻数据元素之间存在顺序关系。相邻数据元素之间存在顺序关系。n除第一个元素外,其他每一个元素有且仅有一个直接前趋。
16、除第一个元素外,其他每一个元素有且仅有一个直接前趋。n除最后一个元素外,其他每一个元素有且仅有一个直接后继。除最后一个元素外,其他每一个元素有且仅有一个直接后继。线性表的逻辑结构是线性结构线性表的逻辑结构是线性结构2.2.2 线性表的基本运算(1)初始化initList(L):构造一个空的线性表L,即表的初始化。(2)求表长listLength(L):求线性表L中的结点个数。(3)取值getNode(L,i):取线性表L中的第i个结点(1iListLength(L)。(4)定位locateNode(L,e):在线性表L中查找值为e的结点,并返回该结点在线性表L中的位序。若线性表L中有多个结点的
17、值和e 相同,则返回首次找到的结点的位序;若线性表L中没有结点的值为e,则返回0,表示查找失败。(5)插入insert(L,e,i):在线性表L的第i个元素之前插入新的元素e,线性表L的长度增1。(6)删除delete(L,i):删除线性表L的第i个结点,表L的长度减1。对于实际问题中涉及的其它更为复杂的运算,可以用基本运算的组合来实现。对于实际问题中涉及的其它更为复杂的运算,可以用基本运算的组合来实现。在在Java中,可以用接口或抽象类来定义线性表的操作集合。中,可以用接口或抽象类来定义线性表的操作集合。2.2.2 线性表的基本运算【例2.4】写出两个集合的归并算法。分析:设两个集合A和B分
18、别由两个线性表LA和LB表示,要求将LB中存在但在LA中不存在的数据元素插入到表LA中。算法思想:(1)依次从LB中取出一个数据元素;/使用getNode(L,i)(2)判断该数据元素在LA中是否存在;/使用locateNode(L,e)(3)若不存在,则插入到LA中。/使用insert(L,e,i)算法实现:上述归并算法是利用基本操作完成的,那么每一种基本操作如何实现?这上述归并算法是利用基本操作完成的,那么每一种基本操作如何实现?这要涉及存储结构,只有确定了存储结构才能实现基本算法。要涉及存储结构,只有确定了存储结构才能实现基本算法。2.3 线性表的顺序存储结构及运算实现【学习任务学习任务
19、】理解线性表在顺序存储结构下的特点,掌握顺序表的表示、相关算法及程序实现定义:定义:线性表的顺序存储是指把线性表的各个结点按逻辑次序依次存储在一组地址连续的存储单元里。用这种方法存储的线性表简称为顺序表。结点的存储地址:结点的存储地址:假设线性表中所有结点的类型相同,设表中每个结点占用L个存储单元,并以所占的第一个单元的存储地址作为该结点的存储地址。则线性表中第i+1个结点的存储地址LOC(ai+1)和第i个结点的存储地址LOC(ai)之间满足下列关系:LOC(ai+1)=LOC(ai)+L 一般来说,线性表的第i个数据元素ai的存储地址为:LOC(ai)=LOC(a1)+(i-1)*L 式中
20、LOC(a1)是线性表第一个结点的存储地址,通常称作线性表的起始地址或基地址。2.3.1 顺序表的定义顺序表的特点:顺序表的特点:以元素在计算机中的物理位置相邻来表示线性表中数据元素之间的逻辑关系,如图2.2所示。在顺序表中,每个结点a i 的存储地址是该结点在表中的位置i的线性函数。只要知道基地址和每个结点的大小,就可在相同时间内求出任一结点的存储地址,从而实现对顺序表中数据元素的随机存取。注意:顺序存储结构通常利用高级程序设计语言中的一维数组来表示。注意:顺序存储结构通常利用高级程序设计语言中的一维数组来表示。2.3.1 顺序表的定义顺序表的类定义如下:顺序表的类定义如下:说明:该类定义的
21、是整型数组,在实际应用中,可根据具体情况而定。说明:该类定义的是整型数组,在实际应用中,可根据具体情况而定。2.3.2 顺序表的基本运算实现顺序表的基本操作顺序表的基本操作:初始化、求表长、取值、查找、插入、删除等。1插入操作及程序实现插入操作及程序实现(1)插入运算的逻辑描述)插入运算的逻辑描述 线性表的插入运算是指在表的第i(1in+1)个位置上,插入一个新结点e,使长度为n的线性表:(a1,a2,ai,ai+1,an)。变成长度为n+1的线性表:(a1,a2,ai,e,ai+1,an)。(2)顺序表插入操作过程)顺序表插入操作过程 在顺序表中,结点的物理顺序必须和结点的逻辑顺序保持一致,
22、因此必须将表中位置为n,n-1,i上的结点,依次后移到位置n+1,n,i+1上,空出第i个位置,然后在该位置上插入新结点e。仅当插入位置i=n+1时,才无须移动结点,直接将e插入表的末尾。如图2.3所示。2.3.2 顺序表的基本运算实现注意:由于数组空间大小在声明时确定,当L.lengthdata.length时,表空间已满,不可再做插入操作。当插入位置i的值L.length+1或i1时为非法位置,不可做正常插入操作。2.3.2 顺序表的基本运算实现(3)在整型顺序表的某位置上插入一个值为)在整型顺序表的某位置上插入一个值为 e 的整型元素。具体算法描述如下的整型元素。具体算法描述如下publ
23、ic class LineList public boolean insert(int i,int e)int j;if(length=data.length)/表空间已经满,不能插入 System.out.println(The table is overflow.);return false;if(i length+1)/插入位置是否正确 System.out.println(The position is mistake.);return false;for(j=length-1;j=i;j-)dataj+1=dataj;datai=e;length+;return true;2.3.2
24、 顺序表的基本运算实现(4)算法时间复杂度)算法时间复杂度 算法的时间主要花费在for循环中的结点后移语句上,该语句的执行次数是n-i+1。当i=n+1:移动结点次数为0,即算法在最好情况下时间复杂度是O(1)。当i=1:移动结点次数为n,即算法在最坏情况下时间复杂度是O(n)。假设pi表示在表中第i个位置上插入一个结点的平均概率,则在长度为n的线性表中插入一个元素时需移动元素次数的平均值为:不失一般性,假设在表中任何合法位置(1in+1)上的插入结点的机会是均等的,则Pi=1/(n+1)因此,在等概率插入的情况下,即在顺序表上进行插入运算,平均要移动一半结点,平均时间复杂度是O(n)。2.3
25、.2 顺序表的基本运算实现顺序表的基本操作顺序表的基本操作:初始化、求表长、取值、查找、插入、删除等。2删除操作及程序实现删除操作及程序实现(1)删除运算的逻辑描述)删除运算的逻辑描述线性表的删除运算是指将表的第i(1in)个结点删去,使长度为n的线性表 (a1,ai-1,ai,ai+1,an)变成长度为n-1的线性表 (a1,ai-1,ai+1,an)(2)顺序表插入操作过程)顺序表插入操作过程 在顺序表中,结点的物理顺序必须和结点的逻辑顺序保持一致,因此必须将表中位置为n,n-1,i上的结点,依次后移到位置n+1,n,i+1上,空出第i个位置,然后在该位置上插入新结点e。仅当插入位置i=n
展开阅读全文