数据结构清华大学殷人昆ppt课件.ppt
《数据结构清华大学殷人昆ppt课件.ppt》由会员分享,可在线阅读,更多相关《数据结构清华大学殷人昆ppt课件.ppt(54页珍藏版)》请在三一办公上搜索。
1、1,数据结构 引言,清华大学计算机系 殷人昆,数据结构课件,38-2,数据结构在计算机教育中的地位,计算机教育是一个大的系统工程,有计划、有设计、有实施、有检验,最后要有成果。数据结构在计算机教育中是一门核心课程,是程序设计系列课程中重要的一环。数据结构与算法与程序设计课程一脉相承。程序设计训练学生分析问题、解决问题的技能,数据结构与算法则训练学生在问题解决过程中如何组织数据,如何运用合理的数据结构辅助实现高效的算法。,38-3,数据结构在计算机教育中的地位(必修),38-4,数据结构在计算机教育中的地位(选修),5,第一章 基本概念,清华大学计算机系 殷人昆,数据结构课件,第一章 数据结构概
2、论,算法与数据结构的预备知识,38-6,数据结构的基本概念抽象数据类型算法定义性能分析与度量,第一章 数据结构的概念,38-7,数据(data),数据是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号的集合。数据的分类数值性数据、非数值性数据输入数据、输出数据、存储数据计算机软件 = 程序+文档+数据数据是指计算机程序执行所用的数据,38-8,数据元素 (data element),数据的基本单位。在计算机程序中常作为一个整体进行考虑和处理。有时一个数据元素可以由若干数据项(Data Item)组成。数据项是具有独立含义的最小标识单位。数据元素又称为
3、元素、结点、记录。数据元素的集合是针对某种特定的应用,相同数据类型的数据元素的一个聚集。如学生组成班级,学生是数据元素,班级是一学生集合。,38-9,数据在系统开发中的视图,数据在系统开发中的讨论范畴分为数据结构 + 数据内容 + 数据流数据结构指某一数据元素集合中数据元素之间的关系。数据内容指这些数据元素的具体涵义和内容。数据流指这些数据元素在系统处理过程中是如何传递和变换的。因此,讨论数据结构时,主要不是讨论数据元素的内容和如何处理。,38-10,数据结构(Data Structures),指某一数据元素集合中的所有数据成员之间的关系。完整的定义为: Data_Structure = D,
4、 R, M 其中,D 是某一数据元素的集合;R 是该集合中所有数据成员之间的关系的有限集合;M 是作用在该集合所有数据成员之上的方法(或操作)。,38-11,例:N 个网点之间的连通关系,树形关系:n 个结点用n-1条边连通。网状关系(或图):n 个结点可以用多条边(0 en(n-1)/2)连通。e 是边数。,38-12,数据结构是数据的组织形式,数据元素间的逻辑关系,即数据的逻辑结构;数据元素及其关系在计算机存储内的表示,即数据的物理结构;数据的运算,即对数据元素施加的操作。,38-13,数据的逻辑结构,数据的逻辑结构从逻辑关系上描述数据,与数据的存储无关;数据的逻辑结构可以看作是从具体问题
5、抽象出来的数据模型(面向应用的);数据的逻辑结构与数据元素本身的形式、内容无关;数据的逻辑结构与数据元素的相对存储位置无关。,38-14,数据的逻辑结构分类,线性结构 线性表非线性结构 多维数组 广义表 树 图(或网络) 无结构 集合,38-15,线性结构,树形结构,38-16,堆结构,38-17,38-18,数据的存储结构,数据的存储结构是逻辑结构用计算机语言的实现;数据的存储结构依赖于计算机语言。 顺序存储表示 链接存储表示 索引存储表示 散列存储表示,38-19,数据类型(Data Type),数据类型 一组性质相同的值的集合, 以及定义于这个值集合上的一组操作的总称。数据类型的分类基本
6、数据类型构造数据类型C语言中的基本数据类型 char int float double void 字符型 整型 浮点型 双精度型 无值,38-20,基本数据类型可以看作是计算机中已实现的数据结构。构造数据类型由基本数据类型或构造数据类型组成,在应用中可视为一种数据模型。构造数据类型由不同成分类型构成。数据类型就是数据结构,不过它是从编程者的角度来使用的。数据类型是模板,必须定义属于某种数据类型的变量,才能参加运算。,38-21,抽象数据类型 (ADTs: Abstract Data Types),抽象数据类型由用户定义,用以表示应用问题的数据模型。抽象数据类型由构造数据类型组成, 并包括一组相
7、关的服务(或称操作)。三大特征:信息隐蔽数据封装使用与实现相分离。,38-22,38-23,抽象数据类型构成现代程序设计的基础。它的作用是使程序编写得易于编程、易于测试、易于修改。实现信息隐藏,把所有数据和操作分为公有和私有,可减少接口复杂性,从而减少出错机会。实现数据封装,把数据和操作封装在一起,从语义上更加完整。实现使用与实现相分离,使用者只能通过接口上的操作来访问数据,一旦将来修改数据结构,可以使得修改局部化,提高系统灵活性。,38-24,算法定义,定义:一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列算法 + 数据结构 = 程序特性: 输入 有0个或多个输入 输出 有一个
8、或多个输出(处理结果) 确定性 每步定义都是确切、无歧义的 有穷性 算法应在执行有穷步后结束 有效性 每一条运算应足够基本,可用计算机指令实现,38-25,几种常用算法的类型,三种最基本的常用算法:穷举型:按某种顺序进行逐一枚举和检验,并从中找出那些符合要求的候选解作为问题的解。递推型:由已知至i-1规模的解,通过递推,获得规模为 i 的解。 递归型:把规模为N的问题分解成一些规模较小的问题,然后从这些小问题的解构造出大问题的解 。,38-26,穷举法举例,求解“百钱买百鸡”问题:公鸡每只5钱,母鸡每只3钱,小鸡3只1钱。求解思路:设公鸡数为x,母鸡数为y,小鸡数为z,则可以得到下面的整数不定
9、方程组: x + y + z = 100 5*x + 3*y + z/3 = 100利用穷举法可以写出下面的算法程序:#include void main() ,38-27,int x, y, z; for ( x = 0; x = 100; x+ ) for ( y = 0; y = 100; y+ ) for ( z = 0; z = 100; z+ ) if ( x+y+z = 100 执行结果,38-28,穷举法的算法分析,虽然上述程序很简单,但分析一下可知,此程序为三重循环,循环次数为1013 = 1030301,为106量级。如果改为“万钱买万鸡”,循环次数将达1012量级,计算量
10、太大,这正是穷举法的缺点。为此,可考虑对程序做优化。例如,针对“百钱买百鸡”问题,如果用所有的钱去买公鸡,最多可买20只,而用所有的钱去买母鸡,最多可买33只,所以x、y的值范围可限定在20和33。这样,z的值就自然确定了,而不再是一个变量,可剪去第3层循环。,38-29,与上面程序等效的程序:#include void main() int x, y, z; for ( x = 0, x = 20; x+ ) for ( y = 0; y = 33; y+ ) z = 100-x-y; if ( 5*x+3*y+z/3 = 100 ) printf ( %d%d%dn, x, y, z );
11、 这个程序的循环次数只有21*34 = 714。,38-30,递推法举例,编写程序,用递推法计算斐波那契(Fibonacci)数列的第n项。求解思路:斐波那契(Fibonacci)数列为0, 1, l, 2, 3, 5, 8, 13, ,即: F(0) = 0,F(1) = 1, F(n) = F(n-1)+F(n-2),当n 1时。用递推法编写的程序为: # include int Fib ( int n ) int f0 = 0, f1 = 1, f, i;,38-31,if ( n = 0 | n = 1 ) return n; for ( i = 2; i = n; i+ ) f =
12、f0 + f1; /由前两步结果推出当前结果 f0 = f1; /原前一步当作下一次的前两步 f1 = f; /当前结果当作下一次的前一步 /在进行向前传递时,要注意传递的时序 return f; 主程序调用方式:int n = 7; printf ( ”Fib(%d)=%dn”, n, Fib (n) );,38-32,递归法举例,所谓递归算法就是在函数过程中直接或间接调用自己。还是求斐波那契数列的问题,相应的递归程序为:int Fib ( int n ) if ( n = 0 | n = 1 ) return n;/结束项else return Fib (n-1) + Fib(n-2);/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 清华大学 殷人昆 ppt 课件
链接地址:https://www.31ppt.com/p-1350165.html