ImageVerifierCode 换一换
格式:PPT , 页数:69 ,大小:633.50KB ,
资源ID:3817430      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-3817430.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课件 吴伟民编著.ppt)为本站会员(Facebook)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

数据结构课件 吴伟民编著.ppt

1、1,数据结构,主讲教师 邢振祥,总学时:60 讲课学时:50 实验学时:10 教材: 数据结构C语言版严蔚敏、吴伟民-清华大学出版社数据结构C语言篇习题与解析 李春葆-清华大学出版社,课程安排,课程要求,课前请做好预习 保持课堂安静,头脑清醒,思维活跃 认真、独立、按时完成并提交作业 重视上机实践,有效利用宝贵的上机时间,上机安排 上机地点:机房 上机时间: 上机内容: 要求: 所有作业必须独立完成 算法作业必须经上机调试通过 上机考勤3次缺席,按不及格处理 发现上机时间上网,按缺席一次处理,课程重要性,核心基础课程 编程基础 考研课程 计算机等级考试课程 程序员考试课程,请同学们把本课程的学

2、习重视起来!,1.1 什么是数据结构 1.2 基本概念和术语 1.3 抽象数据类型的表示和实现 1.4 算法和算法分析,第一章 绪论,教学目的: (1)了解数据结构及算法的概念; (2)掌握计算语句频度和估算算法时间复杂度的方法。 教学的重点和难点:估算算法时间复杂度。,第一章 绪论,1.1 什么是数据结构 什么是程序、软件?N.沃思(Niklaus Wirth)教授提出:程序=算法+数据结构程序设计:为计算机处理问题编制一组指令集 算法:处理问题的策略 数据结构:问题的数学模型 软件=程序+文档(软件工程的观点),电子计算机的主要用途: 早期:主要用于数值计算。 后来:处理逐渐扩大到非数值计

3、算领域(能处理多种复杂的具有一定结构关系的数据)。,数值计算解决问题的一般步骤: 数学模型选择计算机语言编出程序测试最终解答。 数值计算的关键是:如何得出数学模型(方程)? 程序设计人员比较关注程序设计的技巧。 非数值计算问题: 数据元素之间的相互关系一般无法用数学方程加以描述,例1 学籍管理问题表结构,完成什么功能?各表项之间是什么关系?,例2 人机对弈问题树结构,如何实现对弈?各格局之间是什么关系?,例3 教学计划编排问题图结构,如何表示课程之间的先修关系?,求解非数值计算的问题:主要考虑的是设计出合适的数据结构及相应的算法。 即:首先要考虑对相关的各种信息如何表示、组织和存储? 因此,可

4、以认为:数据结构是一门讨论“描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现”的学科。,数据结构课程的形成和发展: 形成阶段: 60年代初期,“数据结构”有关的内容散见于操作系统、编译原理和表处理语言等课程。1968年,“数据结构”被列入美国一些大学计算机科学系的教学计划。 发展阶段: 数据结构的概念不断扩充,包括了网络、集合代数论、关系等“离散数学结构”的内容。 70年代后期,我国高校陆续开设该课程。,数据结构课程所处的地位:,1.2 基本概念和术语 数据(Data):是对信息的一种符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

5、数据元素(Data Element):是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。 三者之间的关系:数据 数据元素 数据项 例:班级通讯录 个人记录 姓名、年龄 数据对象(Data Object):是性质相同的数据元素的集合。是数据的一个子集。,序偶:由两个具有给定次序的元素x和y所组成的序列,记为。 关系:是指集合中元素之间的相互联系。是集合中某些元素所构成的序偶的集合。 例如 D=A,B,C,D,ER=,和R=,都是D上的一种关系。,数据结构:,带结构的数据元素的集合,假设用三个 4 位的十进制数表示一

6、个含 12 位数的十进制数。,3214,6587,9345 a1(3214),a2(6587),a3(9345),则在数据元素 a1、a2 和 a3 之间存在着“次序”关系 a1,a2、a2,a3,3214,6587,9345 a1 a2 a3,6587,3214,9345a2 a1 a3,例如:,又例,在2行3列的二维数组a1, a2, a3, a4, a5, a6 中六个元素之间 存在两个关系:,行的次序关系:列的次序关系:,row = ,col = ,a1 a3 a5a2 a4 a6,a1 a2 a3 a4 a5 a6,再例,在一维数组 a1, a2, a3, a4, a5, a6 的数

7、据元素之间存在如下的次序关系:,| i=1, 2, 3, 4, 5,或者说,数据结构是相互之间存在着某种逻辑关系的数据元素的集合。,可见,不同的“关系”构成不同的“结构”,具体来说,数据结构包含三个方面的内容,即数据的逻辑结构,数据的存贮结构和对数据所施加的运算,数据的逻辑结构,逻辑结构:指数据元素之间逻辑关系的整体。,数据的逻辑结构是从具体问题抽象出来的数据模型,逻辑结构是从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。,数据的逻辑结构,数据结构从逻辑上分为四类: 集合:数据元素之间就是“属于同一个集合” ;,数据的逻辑结构,数据结构从逻辑上分为四类: 集合:数据元素之间就是 “

8、属于同一个集合” ; 线性结构:数据元素之间 存在着一对一的线性关系;,数据的逻辑结构,数据结构从逻辑上分为四类: 集合:数据元素之间就是 “属于同一个集合” ; 线性结构:数据元素之间存在着一对一的线性关系; 树结构:数据元素之间存在着一对多的层次关系;,数据的逻辑结构,数据结构从逻辑上分为四类: 集合:数据元素之间就是 “属于同一个集合” ; 线性结构:数据元素之间存在着一对一的线性关系; 树结构:数据元素之间存在 着一对多的层次关系; 图结构:数据元素之间存在 着多对多的任意关系。,数据结构的形式定义为:,数据结构是一个二元组,Data_Structures = (D, S),其中:D

9、是数据元素的有限集,S 是 D上关系的有限集。,例:用图形表示下列数据结构,并指出它 们是属于线性结构还是非线性结构。,(1) S=(D, R)D= a, b, c, d, e, f R=, , , , ,解: 上述表达式可用图形表示为:,b c a e f d,此结构为线性的。,(2) S=(D, R) D=di | 1i5 R=, ij,d1d5 d2d4 d3,该结构是非线性的。,解:上述表达式可用图形表示为:,数据的物理结构,物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。,例:(见教材P6)复数3.02.3i 的两种存储方式:,法1:地址 内容

10、,法2:地址 内容,2字节,在不同的编程环境中,,存储结构可有不同的描述方法。,当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述之。,例如:,以三个带有次序关系的整数表示一个长整数时,可利用 C 语言中提供的整数数组类型。,typedef int Long_int 3,定义长整数为:,逻辑结构和存储结构之间的关系,数据的逻辑结构属于用户视图,是面向问题的,反映了数据内部的构成方式;数据的存储结构属于具体实现的视图,是面向计算机的。一种数据的逻辑结构可以用多种存储结构来存储,而采用不同的存储结构,其数据处理的效率往往是不同的。,数据的运算(算法),在数据的逻辑结构上定义的

11、操作算法。 它在数据的存储结构上实现。,最常用的数据运算有5种:,插入、删除、修改、查找、排序,数据类型:是一个值的集合和定义在该值上的一组操作的总称。,抽象数据类型:是用户在数据类型基础上新定义的数据类型。是指一个数学模型以及定义在此数学模型上的一组操作。抽象数据类型定义包括数据组成和对数据的处理操作。,它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。,例 C语言中,提供int, char, float, double等基本数据类型,数组、结构体、共用体、枚举等构造数据类型,还有指针、空(void)类型等。用户也可用typedef 自己定义数据类型

12、,抽象数据类型可以用以下的三元组来表示:ADT = (D,S,P)数据对象 D上的关系集 D上的操作集,ADT抽象数据类型名 数据对象:数据关系: 基本操作 : ADT抽象数据类型名,ADT常用定义格式,数据对象和数据关系的定义用伪码描述,基本操作定义格式为,基本操作名(参数表)初始条件:操作结果:,例如,抽象数据类型复数的定义:,数据对象:De1,e2e1,e2RealSet 数据关系:R1 | e1是复数的实数部分| e2 是复数的虚数部分 ,ADT Complex ,基本操作:,AssignComplex( &Z, v1, v2 ) 操作结果:构造复数 Z,其实部和虚部分别被赋以参数 v

13、1 和 v2 的值。,DestroyComplex( &Z) 操作结果:复数Z被销毁。,GetReal( Z, &realPart ) 初始条件:复数已存在。 操作结果:用realPart返回复数Z的实部值。,GetImag( Z, &ImagPart ) 初始条件:复数已存在。 操作结果:用ImagPart返回复数Z的虚部值。,Add( z1,z2, &sum ) 初始条件:z1, z2是复数。 操作结果:用sum返回两个复数z1, z2 的和值。, ADT Complex,1.3 抽象数据类型的表示和实现,抽象数据类型可以通过固有的数据类型(如整型、实型、字符型等)来表示和实现。,注1 :

14、它有些类似C语言中的结构(struct)类型,但增加了相关的服务。 注2 :教材中用的是类C语言(介于伪码和C语言之间)作为描述工具。其描述语法见P10-11。,但上机时要用具体语言实现,如C或C+等,typedef struct float realpart;float imagpart; complex;,/ -存储结构的定义,/ -基本操作的函数原型说明,void Assign( complex &Z, float realval, float imagval ); / 构造复数 Z,其实部和虚部分别被赋以参数 / realval 和 imagval 的值,float GetReal(

15、cpmplex Z );/ 返回复数 Z 的实部值,float Getimag( cpmplex Z );/ 返回复数 Z 的虚部值,void add( complex z1, complex z2, complex &sum );/ 以 sum 返回两个复数 z1, z2 的和,/ -基本操作的实现,void add( complex z1, complex z2, complex , 其它省略 ,算法的相关概念,1.算法(Algorithm):是对特定问题求解步骤的一种描述,是指令的有限序列。,2. 算法的五大特性: 输入:一个算法有零个或多个输入。 输出:一个算法有一个或多个输出。 有穷

16、性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。 确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。 可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。,1.4 算法及算法分析,欧几里德算法,m,n,r,例:欧几里德算法辗转相除法求两个自然数 m 和 n 的最大公约数,1.4 算法及算法分析,算法的描述方法自然语言,优点:容易理解 缺点:冗长、二义性 使用方法:粗线条描述算法思想 注意事项:避免写成自然段,1.4 算法及算法分析, 输入m 和n; 求m除以n的余数r; 若r等于0,则n为最大公约数,算法结束;否则执行第步; 将n

17、的值放在m中,将r的值放在n中; 重新执行第步。,例:欧几里德算法,自然语言,1.4 算法及算法分析,优点:流程直观 缺点:缺少严密性、灵活性 使用方法:描述简单算法 注意事项:注意抽象层次,算法的描述方法流程图,1.4 算法及算法分析,流 程 图,例:欧几里德算法,1.4 算法及算法分析,优点:能由计算机执行 缺点:抽象性差,对语言要求高 使用方法:算法需要验证 注意事项:将算法写成子函数,算法的描述方法程序设计语言,1.4 算法及算法分析,#include int CommonFactor(int m, int n) int r=m % n;while (r!=0) m=n;n=r;r=m

18、 % n;return n; void main( ) coutCommonFactor(63, 54)endl; ,程序设计语言,例:欧几里德算法,1.4 算法及算法分析,4 算法及算法分析,伪代码(Pseudocode):介于自然语言和程序设计语言之间的方法,它采用某一程序设计语言的基本语法,操作指令可以结合自然语言来设计。 优点:表达能力强,抽象性强,容易理解 使用方法:7 2,算法的描述方法伪代码,1.4 算法及算法分析,1. r = m % n;2. 循环直到 r 等于02.1 m = n;2.2 n = r;2.3 r = m % n;3. 输出 n ;,伪 代 码,上述伪代码再具

19、体一些,用C+的函数来描述。请同学们自行完成!,例:欧几里德算法,1.4 算法及算法分析,算法分析,1.度量算法效率的方法:事后统计:将算法实现,测算其时间和空间开销。 缺点: 编写程序实现算法将花费较多的时间和精力; 所得实验结果依赖于计算机的软硬件等环境因素。事前分析:对算法所消耗资源的一种估算方法。,1.4 算法及算法分析,算法分析,算法分析(Algorithm Analysis):对算法所需要的计算机资源时间和空间进行估算。时间复杂性(Time Complexity)空间复杂性(Space Complexity),1.4 算法及算法分析,4 算法及算法分析,2 算法的时间复杂度 问题规

20、模 是指输入量的多少。 算法复杂度 是运行算法所需要的计算机资源的量。算法复杂度包含时间复杂度和空间复杂度。,算法时间复杂度用依据该算法编制的程序在计算机上执行所消耗的时间来度量。一个算法所花费的时间是该算法中每条语句的执行时间的和,而每条语句的执行时间是该语句重复执行的次数(频度) 。一个算法所花费的时间是该算法中所有语句的频度的和。,例求两个N阶方阵的乘积C=A*B #define n 100 Void MatrixMultiply(int Ann, int Bnn, int Cnn) (1) for(i=1,i=n;+i) n+1(2) for(j=1;j=n;+j) n(n+1)(3)

21、 cij=0; n2(4) for(k=1;k=n;+k) n2(n+1)(5) cij+=aik*bkj; n3 T(n)=2n3+3n2+2n+1,通常,算法的执行时间是问题规模的函数,而我们只关心它的数量级的度量。算法的时间复杂度是算法的执行时间随问题规模的增长而增长的趋势。若随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则称T(n)=O(f(n) 为算法的渐近时间复杂度。因为T(n)/n32所以T(n)=O(n3)算法的时间复杂度为O(n3)为了简化对算法时间性能的分析,通常从算法中选取一种对所研究的问题来说最基本的操作执行的次数作为算法的时间度量。算法中基本操作重

22、复执行的次数(频度)应和算法执行时间成正比。,如例1,由于是一个三重循环,每个循环从1到n,则总次数为: nnn=n3时间复杂度为T(n)=O(n3) 例 +x;s=0;将x自增看成是基本操作,则语句频度为,即时间复杂度为(1),在多数情况下,被选的基本操作是含在最内层循环体中。 例3 for(i=2;i=n;+I)for(j=2;j=i-1;+j)+x;ai,j=x;,基本语句频度为: 1+2+3+n-2 =n2-3n+2时间复杂度为O(n2),例4 x=1; for (i=1;i=n;i+)for (j=1;j=i;j+)for (k=1;k=j;k+)x+;,=n(n+1)(2n+1)/

23、6+n(n+1)/2/2 所以: T(n)=O(n3/6+低次项) 取T(n)的数量级阶,得最后结果为: T(n)=O(n3),有的情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同。例如: Void bubble-sort(int a,int n)for(I=n-1;change=TURE;I1 change=TURE最好情况:0次 最坏情况:1+2+3+n-1=n(n-1)/2平均时间复杂度为:O(n2), 常见函数的时间复杂度按数量递增排列及增长率。 常数阶O(1) 对数阶O(log2n) 线性阶O(n) 线性对数阶O(nlog2n) 平方阶O(n2) 立方阶O(n3)

24、k次方阶O(nk) 指数阶O(2n),与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作:S(n)=O(f(n) 其中n为问题的规模(或大小)我们一般所讨论的是除正常占用内存开销外的辅助存储单元规模。讨论方法与时间复杂度类似,不再赘述。,算法的存储空间需求,本章小结知识结构图,作业:,公元5世纪末,我国古代数学家张丘建在它所撰定的算经中,提出这样一个问题:“鸡翁一,值钱五;鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、母、雏各几何?”意思是说公鸡每只5元,母鸡每只3元,小鸡3只1元,用100元钱买100只鸡,求公鸡、母鸡、小鸡的只数。试设计算法求解该问题,并分析

25、你所设计的算法的时间复杂度。(要求:算法分别用伪代码和C描述),例 一两 个 矩 阵 相 乘,void mult(int a, int b, int /for /mult,基本操作: 乘法操作,时间复杂度: O(n3),例 二选 择 排 序,void select_sort(int& a, int n) / 将 a 中整数序列重新排列成自小至大有序的整数序列。 / select_sort,基本操作: 比较(数据元素)操作,时间复杂度: O(n2),j = i; / 选择第 i 个最小元素 for ( k = i+1; k n; +k )if (ak aj ) j = k;,for ( i = 0; i n-1; +i ) if ( j != i ) aj ai ,例 三起 泡 排 序,void bubble_sort(int -i) / bubble_sort,基本操作: 赋值操作,时间复杂度: O(n2), change = FALSE; / change 为元素进行交换标志for (j=0; j aj+1) aj aj+1; change = TRUE ; / 一趟起泡,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报