数据结构基础.ppt
《数据结构基础.ppt》由会员分享,可在线阅读,更多相关《数据结构基础.ppt(58页珍藏版)》请在三一办公上搜索。
1、JYP,1,数据结构基础,教材:数据结构(C+描述)(金远平编著,清华大学出版社),JYP,2,第1章 基本概念和方法,本章论述学习和研究数据结构所必须的并且将反复出现的基本概念和方法。,3,1.1 数据结构与软件系统,设计解决实际问题的计算机软件系统,首先需要建立被处理对象的数据模型。数据和世上万物一样,都是具有结构的。人们很自然地用数据结构表示应用领域的被处理对象。例如,树和图。数据结构由一个数据对象以及该对象中的所有数据元素之间的关系组成。数据元素本身可以是数据结构,因此,可以构造非常复杂的数据结构。,4,为了模拟实际问题的求解过程和现实对象的行为,还必须提供对数据结构的相应操作。数据结
2、构的实现是以下一层数据结构表示上一层数据结构,直至以程序设计语言提供的基本数据类型表示的过程。评价数据结构表示能力的标准主要是它能否方便且有效地实现需要的操作,而实现操作的算法设计及其效率高低也依赖于数据结构表示。数据结构的定义、表示及其操作的实现相互关联,都是数据结构研究的重要内容。,5,计算机软件系统可看成是通过不同层次的数据结构及其操作实现的。例如:,6,中间层数据结构起着核心作用,称之为建模层。对数据结构的研究产生了一批通用性强、具有很高实用价值的中间层数据结构,如数组、字符串、集合、线性表、栈、队列、链表、树、图、符号表等。系统地学习进而掌握数据结构的知识和方法,对于提高设计与开发软
3、件系统尤其是复杂软件系统的能力,无疑是十分重要的。,7,1.2 数据抽象与封装,抽象和封装的概念在日常生活中是普遍存在的,例如,人们常用的手机。通过数据封装,将一个数据对象的内部结构和实现细节对外屏蔽。通过数据抽象,将一个数据对象的规格说明与其实现分离,对外提供简洁、清晰的接口。数据结构多层表示的过程反过来也就是从基础数据结构到应用领域数据结构的不断抽象与封装的过程。,8,用抽象数据类型(ADT)描述数据抽象与封装是一种自然、有效的方法。数据类型由一个数据对象的集合和一组作用于这些数据对象的操作组成。例如,C+的基本数据类型char、int、float和double等。抽象数据类型是一个数据类
4、型,该数据类型的组织遵循将数据对象及对这些数据对象的操作的规格说明与这些数据对象的表示、操作的实现相分离的原则。,9,当强调一个数据对象的结构时,使用数据结构的概念。与数据结构的概念对比,抽象数据类型包含了一个数据结构的集合,还包含了对数据结构的操作。抽象数据类型成为描述数据结构及其操作的有效方式。定义ADT的语言本质上不依赖具体的程序设计语言,这里采用C+描述。,10,例1.1 抽象数据类型“圆”的定义为:class Circle/对象:几何圆public:Circle(float r);/构造函数,创建一个半径为r的对象实例 float Circumference();/返回该实例的周长
5、float Area();/返回该实例的面积;该抽象数据类型的名称为Circle,数据对象定义为几何圆,操作包括构造函数、计算周长和面积等。注意:这些定义不依赖于数据对象的具体表示,也没有给出操作实现的过程。,11,数据抽象和封装机制的意义:(1)简化软件开发:假设一个问题经分析将使用A、B、C三个数据类型和协调代码求解。(a)四位程序员,可由其中三位程序员各开发一个数据类型,另一位程序员实现协调代码。(b)一位程序员,数据抽象也可减少其在某一具体时间需要考虑的范围。,12,(2)易于测试和排除错误:如下图所示,数据抽象明显提高了测试和排除错误的效率。,13,(3)有利于重用:数据抽象和封装机
6、制使开发人员可以将数据结构及其操作实现为可重用的软件组件。这些组件具有清晰的界面定义,更容易从一个软件系统中提取出来,应用于另一个软件系统。(4)便于改变数据类型的表示:由于数据封装,外界不能直接访问数据类型的内部表示。因此,只要操作接口不变,数据类型内部表示和实现的改变不会影响使用该数据类型的其他程序。,14,1.3 算法定义,数据结构的操作实际上是以算法的形式实现的。定义:算法是一个有限的指令集合,执行这些指令可以完成某一特定任务。一个算法还应当满足以下特性:输入 零个或多个由外界提供的输入量。输出 至少产生一个输出量。确定性 每一指令都有确切的语义,无歧义。有限性 在执行有限步骤后结束。
7、有效性 每一条指令都应能经过有限层的表示转化为计算平台的基本指令,即算法的指令必须是可行的。,15,程序和算法不同,程序可以不满足有限性。例 如,一个软件的总控程序在未接受新的任务之前一直处于“等待”循环中。实现数据结构操作的程序总是可结束的,因此,后面将不再严格区分算法和程序这两个术语。必须保证指令的有效性,例如,指令“if(哥德巴赫猜想是真)then x=y;”是无效的。作业:P253,16,1.4 递归算法,直接递归:函数在执行过程中调用本身。间接递归:函数在执行过程中调用其它函数再经过这些函数调用本身。表达力:,函数定义赋值if-elsewhile,函数定义赋值if-else递归,17
8、,当问题本身是递归定义的,其解法适合用递归描述。例1.3 阶乘函数的定义是 1 当n=1n!=n(n-1)!当n1 用递归方法计算阶乘函数简明扼要,易于理解,如下所示:long Factorial(long n)if(n=1)return 1;/终止条件 else return n*Factorial(n-1);/递归步骤,18,用参数n=5调用Factorial的过程如下:Factorial(5)=(5*Factorial(4)=(5*(4*Factorial(3)=(5*(4*(3*Factorial(2)=(5*(4*(3*(2*Factorial(1)=(5*(4*(3*(2*1)=(
9、5*(4*(3*2)=(5*(4*6)=(5*24)=120,19,递归算法有四个特性:(1)必须有可最终达到的终止条件,否则程序将陷入无穷循环;(2)子问题在规模上比原问题小,或更接近终止条件;(3)子问题可通过再次递归调用求解或因满足终止条件而直接求解;(4)子问题的解应能组合为整个问题的解。,20,例1.4 全排列生成器:给定一个具有n1个元素的集合,打印该集合的全排列。分析四个元素(a,b,c,d)的情况,结果可以如下构造:(1)a后接(b,c,d)的全排列(2)b后接(a,c,d)的全排列(3)c后接(a,b,d)的全排列(4)d后接(a,b,c)的全排列 这表明,如果能生成n 1个
10、元素的全排列,就能生成n个元素的全排列。,21,对于只有1个元素的集合,可以直接生成其全排列。于是,全排列生成问题的递归步骤和终止条件可以确定。求解函数perm:void perm(char*a,const int k,const int n)/n 是数组a的元素个数,生成ak,an-1的全排列 int i;if(k=n-1)/终止条件,输出排列 for(i=0;in;i+)cout ai“”;/输出包括前/缀,以构成整个问题的解 cout endl;,22,else/ak,an-1 的排列大于1,递归生成 for(i=k;i n;i+)char temp=ak;ak=ai;ai=temp;/
11、交换ak/和 ai perm(a,k+1,n);/生成 ak+1,an-1的全排列 temp=ak;ak=ai;ai=temp;/再次交换 ak 和/ai,恢复原顺序/else结束/perm结束 通过调用perm(a,0,n),可以生成n个元素的全排列。,23,用n=3 和 a0.2=(a,b,c)调用perm的示意如下:,24,当算法操作的数据结构是递归定义的时候也适合使用递归。后面将有许多此类的重要例子。作业:P255,6,25,1.5 性能分析,除了正确性、可用性、可读性和容错性以外,算法的性能是评价算法优劣的重要指标。空间复杂性:算法开始运行直至结束过程中所需要的最大存储资源开销的一种
12、度量。时间复杂性:算法开始运行直至结束所需要的执行时间的一种度量。性能评价分为事前估计和事后测量。性能分析就是指对算法的空间复杂性和时间复杂性进行事前估计。,26,1.5.1 空间复杂性,程序P的空间需求 S(P)=c+SP(实例特性)其中,c是常数,SP(实例特性)是实例特性的函数。分析的重点是SP(实例特性)。对于一个给定问题,首先要确定其实例特性,才可能分析求解算法的空间要求。确定实例特性与具体问题密切相关。,27,例如:1 float rsum(float*a,const int n)2 if(n=0)return 0;/当n=1时返回a03 else return rsum(a,n1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 基础
链接地址:https://www.31ppt.com/p-5083657.html