数据结构件课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构件课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 结构件 课件
- 资源描述:
-
1、数据结构 第一章绪论 第二章线性表 第三章数组和广义表 第四章栈和队列 第五章串 第六章树 第七章图 第八章查找 第九章排序第一章 绪论本章学习要求:了解数据结构的研究内容。理解掌握数据结构的基本概念和术语。了解数据元素间的结构关系。理解掌握算法及算法的描述1.1 数据结构的发展数据结构的发展1.1.1数据结构的发展简史最早对这一发展作出杰出贡献的是D.E.Kunth教授和C.A.R.Hoare(霍尔)。D.E.Kunth的计算机程序设计技巧和霍尔的数据结构札记对数据结构这门学科的发展作出了重要贡献。随着计算机科学的飞速发展,到20世纪80年代初期,数据结构的基础研究日臻成熟,已经成为一门完整
2、的学科。1.1.2数据结构的研究内容 用计算机解决一个具体的问题时,大致需要经过以下几个步聚:(1)分析问题,确定数据模型。(2)设计相应的算法。(3)编写程序,运行并调试程序直至得到正确的结果。例例1.1 学生成绩表学号姓名高数数据结构8201001李红89908201002杜刚958782010040刘珊8786一 个 数 据元素数据项例例1.2组织示意图 学院教务处学生处总务处图书馆电教中心团委财务科后勤中心例例1.3七桥问题Euler在1736年访问俄罗斯的哥尼斯堡时,他发现当地的居民正从事一项非常有趣的消遣活动。哥尼斯堡城中有一条名叫勒格尔的河流横经其中,在河上建有七座桥如图所示:A
3、DBC这项有趣的消遣活动是在星期六作一次走过所有七座桥的散步,每座桥只能经过一次而且起点与终点必须是同一地点。设四块陆地分别为A、B、C、D,Euler把每一块陆地考虑成一个点,连接两块陆地的桥以线表示,便得到如下的图形:ADCB1327645后来推论出此种走法是不可能的。他的论点是这样的,除了起点以外,每一次当一个人由一座桥进入一块陆地(或点)时,他(或她)同时也由另一座桥离开此点。即每个点如果有进去的边就必须有出来的边,因此每一个陆地与其他陆地连接的桥数必为偶数。七桥所成的图形中,没有一点含有偶数条数,因此上述的任务是不可能实现的。1.2 数据结构的基本概念和术语 数据数据(data):是
4、指在计算机科学中能够被计算机输入、存储、处理和输出的一切信息,是计算机处理的信息的某种特定的符号表示形式。包括数字、英文、汉字、以及表示图形、声音、光和电的符号等。数据项数据项(Data Item):是数据的最小单位,有时也称为域(field),即数据表中的字段。数据项是具有独立含义的不可分割的最小标识单位。1.2 数据结构的基本概念和术语 数据元素数据元素(Data Element):是数据的基本单位,在计算机信息处理中通常作为一个整体来考虑。一个数据元素可以由若干个数据项组成,数据元素也称为元素、结点、顶点、记录。数据对象(Data Object):具有性质相同的数据元素的集合,是数据的一
5、个子集。如整数数据对象是集合N=0,1,2,。1.2 数据结构的基本概念和术语 数据类型:数据类型:是一个值的集合和定义在这个值集合上的一组操作的总称。数据类型中定义了两个集合:值的集合和操作集合。其中值的集合定义了该类型数据元素的取值,操作集合定义了该类型数据允许参加的运算,例如C语言中的int类型,取值范围是-3276832767,主要的运算为加、减、乘、除、取模、乘方等。数据结构数据结构(Data Structure):带结构的数据元素的集合,描述了一组数据元素及元素间的相互关系。数据元素间的关系包括三个方面:数据的逻辑结构、存储结构和操作集合。1.2 数据结构的基本概念和术语 数据类型
6、:数据类型:是一个值的集合和定义在这个值集合上的一组操作的总称。数据类型中定义了两个集合:值的集合和操作集合。其中值的集合定义了该类型数据元素的取值,操作集合定义了该类型数据允许参加的运算,例如C语言中的int类型,取值范围是-3276832767,主要的运算为加、减、乘、除、取模、乘方等。数据结构数据结构(Data Structure):带结构的数据元素的集合,描述了一组数据元素及元素间的相互关系。数据元素间的关系包括三个方面:数据的逻辑结构、存储结构和操作集合。1.3 数据的逻辑结构 逻辑结构(逻辑结构(logical structure):):是指数据元素之间的逻辑关系,是用户使用需要建
7、立起来的数据组织形式,是独立于计算机的。根据数据元素之间的不同关系,有以下四种基本逻辑结构:(1)线性结构:结构中的数据元素之间是一对一的关系。在线性结构中,有且仅有一个开始结点和一个终端结点,除了开始结点和终端结点,其余结点都有且仅有一个直接前趋和一个直接后继。1.3 数据的逻辑结构(2)树状结构或层次结构:数据元素之间存在着一对多的关系。比如部门之间的隶属关系、人类社会的父子关系、上下级关系等。在树形结构中,除根结点之外,每个结点都有唯一直接前趋,所有的结点都可以有0个或多个直接后继。1.3 数据的逻辑结构(3)图形结构或网状结构:结构中的数据元素之间存在着多对多的关系。在图状结构中,每个
8、结点都可以有多个直接前趋和多个直接后继。(4)集合结构:数据元素间除了同属于一个集合的关系外,无任何其他关系。1.3 数据的逻辑结构 一个数据结构的逻辑结构G可以用二元组来表示:G=(D,R)其中:D是数据元素的集合;R是D上所有数据元素之间关系的集合(表示各元素的前趋、后继关系)。R中的关系圆括号表示是双向的,尖括号表示是单向的。例例1-4一种数据结构Graph=(D,R)其中:D=A,B,C,D,E R=r r=(A,B),(A,C),(B,C),(B,D),(B,E),(C,E)r中的(A,B)表示顶点A到顶点B之间的边是双向的,上述的结构关系如图1-5所示。ADCBE1.4数据的存储结
9、构 数据的存储结构(storage structure)又称物理结构,是数据的逻辑结构在计算机存储器中的存储形式(或称映象)。(1)顺序存储结构:顺序存储结构:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,可用一维数组描述。(2)链式存储结构:链式存储结构:借助指示元素存储地址的指针来表示数据元素之间的逻辑关系。可用指针描述,数据元素不一定存在地址的存储单元,存储处理的灵活性较大。(3)索引存储索引存储:是在原有存储数据结构的基础上,附加建立一个索引表,索引表中的每一项都由关键字和地址组成。采取索引存储的主要作用是为了提高数据的检索速度。(4)散列存储散列存储:是通过构造散列函数来
10、确定数据存储地址或查找地址的。1.5算法和算法的描述算法和算法的描述1.5.1 什么是算法1算法的的概念算法的的概念算法算法是为了解决某类问题而规定的一个有限长的操作序列,是对解题过程的准确而完整的描述。2算法的特性算法的特性一个算法一般具有以下特性:(1)输入:一个算法必须有0个或多个输入。这些输入取自于特定的对象的集合。它们可以使用输入语句由外部提供,也可以使用赋值语句在算法内给定。(2)确定性:算法的每一步都应确切地、无歧义地定义。对于每一种情况,需要执行的动作都应严格地、清晰地规定。(3)有穷性:一个算法无论在什么情况下都应在执行有穷步后结束。1.5算法和算法的描述算法和算法的描述(4
11、)可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。(5)输出:一个算法应有一个或多个输出,输出的量是算法计算的结果。3.算法与程序的区别算法与程序的区别(1)算法代表了对问题的求解过程,而程序则是算法在计算机上的实现。算法用特写的程序设计语言来描述,就成了程序。(2)程序中的指令必须是机器可执行的,而算法中的指令则无此限制。(3)一个算法必须在有穷步之后结束,一个程序不一定满足有穷性。(4)可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。(5)输出:一个算法应有一个或多个输出,输出的量是算法计算的结果。
12、3.算法与程序的区别算法与程序的区别(1)算法代表了对问题的求解过程,而程序则是算法在计算机上的实现。算法用特写的程序设计语言来描述,就成了程序。(2)程序中的指令必须是机器可执行的,而算法中的指令则无此限制。(3)一个算法必须在有穷步之后结束,一个程序不一定满足有穷性。1.5.2 算法设计的要求通常设计一个“好”的算法应考虑达到如下目标:(1)正确性:在合理的数据输入下,能在有限的运行时间内得到正确的结果。(2)可读性:程序可读性好,有助于人对算法的理解。(3)健壮性:当输入的数据非法时,算法应当恰当地作出反映或进行相应处理,而不是产生莫名奇妙的输出结果。并且,处理出错的方法不应是中断程序的
13、执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。(4)高效性:对同一个问题,执行时间越短,算法的效率越高。(5)低存储量:完成相同的功能,执行算法所占用的存储空间应尽可能的少。1.5.4 算法的描述 算法可以用流程图、自然语言、计算机程序语言或其他语言来描述,但描述必须精确地说明计算过程。在本书中算法是以函数形式描述,描述如下:类型标识符函数名(形式参数表)*算法说明语句序列 1.5.4 算法效率的评价 算法可以用流程图、自然语言、计算机程序语言或其他语言来描述,但描述必须精确地说明计算过程。在本书中算法是以函数形式描述,描述如下:类型标识符函数名(形式参数表)*算
14、法说明语句序列1时间复杂度(时间复杂度(Time Complexity)一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数(n),算法的时间量度记作:T(n)=O(n)它表示随问题规模n的增大,算法执行时间的增长率和(n)的增长率相同,称做算法的渐近时间复杂度,简称时间复杂度。1.5.4 算法效率的评价 算法可以用流程图、自然语言、计算机程序语言或其他语言来描述,但描述必须精确地说明计算过程。在本书中算法是以函数形式描述,描述如下:类型标识符函数名(形式参数表)*算法说明语句序列1时间复杂度(时间复杂度(Time Complexity)一般情况下,算法中基本操作重复执行的次数是问题
15、规模n的某个函数(n),算法的时间量度记作:T(n)=O(n)它表示随问题规模n的增大,算法执行时间的增长率和(n)的增长率相同,称做算法的渐近时间复杂度,简称时间复杂度。1.5.4 算法效率的评价 算法可以用流程图、自然语言、计算机程序语言或其他语言来描述,但描述必须精确地说明计算过程。在本书中算法是以函数形式描述,描述如下:类型标识符函数名(形式参数表)*算法说明语句序列1时间复杂度(时间复杂度(Time Complexity)一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数(n),算法的时间量度记作:T(n)=O(n)它表示随问题规模n的增大,算法执行时间的增长率和(n)的
16、增长率相同,称做算法的渐近时间复杂度,简称时间复杂度。1.5.4 算法效率的评价 例1-5在下列的三个程序中(a)x=0 (b)for(i=1;i=n;i+)x=x+1 (c)for(i=1;i=n;i+)for(j=1;j=n;j+)X=X+i*j上述三个语句的频度分别为1,n,n22.空间复杂度空间复杂度(Space ComPlexity)一个程序的空间复杂度是指程序运行从开始到结束所需要的存储空间。包括算法本身所占用的存储空间、输入数据占用的存储空间以及算法在运行过程中的工作单元和实现算法所需辅助空间。第二章 线性表本章学习要求:系统学习线性表的存储结构及其基本操作。理解线性表的逻辑结构
17、 理解掌握线性表的顺序存储结构及操作 理解掌握线性表的链式存储结构及操作2.1线性表逻辑结构 2.1.1 线性表的定义1线性表的定义线性表的定义线性表(Linear List)是具有相同数据类型的数据元素的一个有限序列。通常表示为:(a1,a2,ai,ai+1 an)其中n为线性表的长度,n0;当n=0时表示一个空表。线性表相邻元素之间存在着顺序关系。a1叫表头元素,an叫表尾元素。除第一个和最后一个元素外,每个元素都只有一个前趋和一个直接后继。ai-1称为ai的直接前趋结点,ai+1称为ai的直接后继结点。表中的元素可以是一个数,也可以是由多个数据项组成的复杂信息,但线性表中的元素必须属于同
18、一数据对象。例如英文字母(A,B,.Y,Z)和在绪论中引入的学生成绩表表11。2线性表的二元组表示线性表的二元组表示线性表用二元组表示为:linear_list=(D,R)其中数据对象:D=ai|1in,n 0,aiElemType数据关系:R=r,r=|1in-1,对应的逻辑结构图如图2-1所示:图2-1线性表的逻辑结构图 a1a2aian2.1.2 线性表的基本操作线性表是一种简单灵活的数据结构,我们根据需要可以对线性表中的元素进行访问、插入和删除等操作,常用操作有以下几种:(1)创建线性表:创建线性表:InitList(L)初始条件:表不存在操作结果:构造一个空的线性表L。(2)求线性表
19、的长度:求线性表的长度:ListLength(L)初始条件:线性表L已存在。操作结果:返回L中元素个数。(3)查找线性表中的元素:查找线性表中的元素:GetElem(L,i)初始条件:线性表L已存在,1iLengthList(L)操作结果:用来返回L中第i个元素的值。2.1.2 线性表的基本操作(4)查找线性表中元素的位置查找线性表中元素的位置:LocateElem(L,x)初始条件:线性表L已存在 操作结果:返回L中查找值为x的数据元素,若查找成功,则返回值为x的那个元素在L中首次出现的的序号或地址,否则,在L中未找到值为X的数据元素,则返回值为特定值,表示查找失败。(5)插入操作:插入操作
20、:ListInsert(&L,i,x)初始条件:线性表L已存在,1iLengthList(L)+1操作结果:在L的第i个元素之前插入新的元素x,L的长度增1。(6)删除操作:删除操作:ListDelete(&L,i,&e)初始条件:线性表L已存在且非空,1iLengthList(L)操作结果:删除L的第i个元素,并用e返回其值,L的长度减1。2.2线性表的顺序存储结构线性表的顺序存储结构2.2.1 顺序存储结构线性表的顺序存储线性表的顺序存储是指用一组地址连续的存储单元依次存放线性表的数据元素,这种存储形式的线性表称为顺序表。它的特点是线性表中相邻的元素在内存中的存储位置也是相邻的。由于线性表
21、中的所有数据元素属于同一类型,所以每个元素在存储中所占的空间大小相同。如图2-2所示,如果第一个元素存放的位置为b,每个元素占用的空间大小为L,则顺序表中第i个数据元素ai的存储位置为:LOC(ai)=LOC(a1)+(i-1)*L,其中LOC(a1)是线性表的起始地址或基地址。即LOC(ai)=b+(i-1)*L在程序设计中,一维数组在内存中占用的存储空间就是一组连续的存储区域,因此在高级语言中讨论线性表的顺序存储结构,通常是利用数组来进行描述。由于对线性表需要进行插入和删除等操作,其长度是可变的。因此线性表的顺序结构可定义为:typedef structElemType elemMaxSi
22、ze;/*存储线性表中的元素*/int len;/*线性表的当前表长*/SqList;2.2.2 基本操作的实现 在线性表的顺序存储结构中,ListLength(L)等操作比较简单,在这里我们主要介绍以下几种操作。1插入插入线性表的插入是指在表的第i个位置上插入一个值为x的元素,线性表的逻辑结构由(a1,ai-1,ai,an)改变为(a1,ai-1,x,ai,an),表长变为n+1。算法思想如下:(1)检查i值是否超出所允许的范围(1in+1),若超出,则进行“超出范围”错误处理;(2)否则,将线性表的第i个元素和它后面的所有元素均向后移动一个位置;(3)将新元素写入到空出的第i个位置上;(4
23、)使线性表的长度增加1。2.2.2 基本操作的实现具体算法:【算法算法2.1】int Insert_Sq(SqList*L,int i,ElemType x)/*在顺序线性表L的第i个元素之前插入新的元素x*/Int i,j;if(i L-len+1)return 0;/*不合理的插入位置*/if(L-len=L-MaxSize-1)return 1;/*表已满*/for(j=L-len;j=i;-j)L-elemj+1=L-elemj;L-elemi=x;+L-len;return 1Insert_Sq2.2.2 基本操作的实现 插入算法的时间性能分析:顺序表上的插入运算,时间主要消耗在数据
24、的移动上,在第i个位置上插入x,从an到ai都要向下移动一个位置,共需要移动n-il个元素,而i的取值范围为:1in+1,即n+1个位置可以插入。设在第i个位置上作插入的概率为pi,则平均移动数据元素的次数:Ein=1n1ii1)i-(np2.2.2 基本操作的实现 如果在表的任何位置插入元素的概率相等,即:pi=,则:Ein=因此在顺序表上做插入操作,平均约移动表中一半的元素,若表长为n,则上述算法的时间复杂度为O(n)。1n1ii1)i-(np11n1n1i1)i-(n2n2.2.2 基本操作的实现2 删除操作删除操作删除操作是指删除线性表中的第i个数据元素,线性表的逻辑结构由(a1,ai
25、-1,ai,ai+1,an)变成长度为n-1的(a1,,ai-1,ai+1,an)。算法思想如下:(1)检查i值是否超出所允许的范围(1in),若超出,则进行“超出范围”错误处理;(2)否则,将线性表的第i个元素后面的所有元素均向前移动一个位置;(3)使线性表的长度减1。具体算法如下:2.2.2 基本操作的实现【算法算法2.2】int Delete_Sq(SqList*L,int i)/*删除线性表中第i个元素*/if(i L-len)return 0;/*不合理的删除位置*/if(L-len=0)return 1;/*空表*/for(j=i;jlen-1;j+)/*被删除元素的后面元素向前移
展开阅读全文