收藏 分享(赏)

数据结构与算法1.ppt

上传人:Facebook 文档编号:3536754 上传时间:2018-11-13 格式:PPT 页数:35 大小:174KB
下载 相关 举报
数据结构与算法1.ppt_第1页
第1页 / 共35页
数据结构与算法1.ppt_第2页
第2页 / 共35页
数据结构与算法1.ppt_第3页
第3页 / 共35页
数据结构与算法1.ppt_第4页
第4页 / 共35页
数据结构与算法1.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、第一章 概述,这一章,我们重点概述数据结构中一些基本概念和基本方法,是以后各章的重要基础。,1.1 数据结构的兴起与发展,数据结构问题起源于程序设计的发展。程序设计现在已经历了三个阶段: 无结构阶段 结构化程序设计阶段 面向对象阶段,计算机应用系统中有两个关键问题: 表示:对象/实体及其关系在计算机中的表示。只有对象及其相互关系已存储(表示)在计算机中,才能被进一步处理; 操作:对对象/实体进行处理、访问,例 解一元二次方程ax2+bx+c=0. 利用计算机解此方程,第一个问题就是如何在计算机中表示该方程。分析该方程,可知决定方程的是方程的三个系数值:a、b、c(在a0情况下,实际上只决定于一

2、次项系数和常数项),而它们的次序表示它们分别属于那一项,其他符号是为增加可读性而引入的,因此,可用这三个系数的线性排列在计算机中表示该方程。例如, 3x2-x+1=0表示为(3, -1, 1) x2-3=0 表示为(1, 0, -3),例 计算机管理家谱。 家谱管理主要实现家庭成员的登记、查询及变更处理等。为突出主题,我们这里假定只考虑家庭中的父子关系。在这个问题中,实体对象是人(家庭成员),关系是父子关系。每个实体用一个记录(元素)表示,包含姓名、出生日期、性别、死亡日期等。为了表示父子关系,在实体记录中可增加若干字段,每个字段用于指示一个儿子/女儿,这样,一个家族就构成了一个层次结构。在数

3、据结构中,该层次结构称为树。图 11给出了一个具体的例子,其中,位于某结点下方的与其相连的各个结点,表示该结点的子女。,归纳起来,数据结构的研究内容为: 为了在计算机上实现具体问题,所需的表示数据/信息及其关系应如何组织(组织起来的数据就具有了结构关系),以及如何对它们进行基本操作。简言之,研究数据的组织方式(结构)及相应的抽象操作。,1.3 数据结构的概念,(1)数据:数据是描述客观事物的信息的符号化,是计算机系统可加工处理的对象(2)数据类型:数据类型定义为:一个值的集合和定义在这个值集上的一组操作的总称。 (3) 数据元素、数据项:能独立、完整地描述问题世界中的实体的最小数据单位称为数据

4、元素(也称记录)。构成数据元素的不可分割的数据单位,称为数据项。 (4)数据对象:同类数据元素的集合称为数据对象。有了上面几个概念,我们就可以给出数据结构的概念了。 (5)数据结构:我们把数据元素之间的关系称为结构。进一步地,我们称相互之间存在着一定关系的数据元素的集合及定义在其上的基本操作(运算)为数据结构。为了与后面要介绍的存储结构区别,有时也强调地称数据结构为数据的逻辑结构。,如果不考虑定义在数据结构上的操作,则数据结构也可借助集合论述语定义为: 数据结构是一个二元组(D,S),其中D是数据元素的有限集,S是D上的关系的有限集。 在这个定义中,数据元素之间的关系采用集合论中关系的形式化描

5、述方法来定义。型为的二元关系中,我们称d1为关系的前件,d2为后件。称d2为d1的后继,而d1为d2的前驱。,1.4 数据结构的图示,用小圆圈代表数据元素,用小圆圈之间的连线代表小圆圈对应的数据元素之间的关系,如果强调关系的方向性,可用带箭头的线段表示关系。具体地讲,若d1和d2表示两个数据元素,它们具有关系d1,d2,则表示为,d1,d2,1.5 数据结构的分类,1.5.1 集合如果数据结构中,数据元素之间不考虑关系问题(无前驱/后继之分),则称这种结构为集合。 在集合中,各元素是“平等”的,它们的共同关系是:都属于同一个集合。,1.5.2 线性结构如果数据结构中,数据元素之间只存在前后顺序

6、关系(每个元素都有唯一前趋和后继,第一个元素可以没有前驱,最后一个可以没有后继),则称这种结构为线性结构。 线性结构是一种最常见的数据结构。线性表、栈、队列、串等均为线性结构。 下图表示的数据结构可表示为: DS=(D, S) D=d1, d2, , dn S= r r=, , , ,1.5.3 树形结构如果除一个特殊元素没有前驱外,其他每个元素都有唯一的前驱(后继个数不限),则称该结构为树型结构(简称树)。其中,将无前驱的元素称为树根。 用图表示树时,通常习惯将树根画在最上面。某元素的各后继画在该元素的下面,且连线不带箭头,隐含着从上到下。这样,树型结构就象用一棵倒立的树。 图 11就是一个

7、树的例子,它代表的结构的形式描述为: DS= ( D, S) D = W1, W11, W12, W13, W111, W121, W122, W131, W132, W133, W1111, W1112, W1221 S = r r = , , , , , , , , , , ,1.5.4 图状结构在图状结构中,任一数据元素,均可有多个前趋和多个后继。该种结构也称网状结构。图状结构表达能力最强,它可表达任意复杂的数据结构。 例如,交通图就是一种图状结构,结点代表城市,连线(关系)代表城市间的道路。 树形结构与图状结构均称为非线性结构。,1.6 数据结构的存储-存储结构,1.6.1 存贮器表示

8、问题 本课程中,数据结构的存储问题,除最后一章外,都针对内存。最后一章将集中讨论外存的数据结构存储。 大多数高级语言支持的访问存贮器的方式是相当高级的,隐蔽了存贮器的许多特性,不利于表示数据的存贮结构。不过,许多高级语言都提供按数组访问存贮器的方式。数组很接近存贮器,所以我们决定用高级语言中的数组模拟计算机存贮器。另外,C/C+中的指针的概念相当接近内存的地址,所以,使用C/C+,可用简单的方式,近乎得到机器指令的效果。,1.6.2 存贮映象(存储结构)问题 数据结构的存贮映象,是指数据结构在计算机中的存储方式/方法,是数据结构的另一种表示方式,称为数据结构的存储结构/方式。将一个逻辑上的数据

9、结构存储在计算机中,必需满足下列两点: 内容存储:数据结构中的各数据元素的内容(数据),都分别存贮在一个独立的可访问的存贮区中; 关系存储:数据元素的存放方式方法,必须能显示地或隐式地体现数据元素间的逻辑关系。 这两点是存贮映象所应有的必要条件。 在满足上述必要条件的基础上,存贮映象还应考虑存贮使用效率(空间复杂度)及数据结构的操作的实现的方便性等。,1.6.3 基本存储方法 一、顺序存储 这是一种主要面向线性关系的存贮方法。对线性数据结构,可将其数据元素,按相应的线性关系下的前后次序,存贮在物理存贮器中,使得数据元素在此线性关系下的逻辑次序与它们在存贮器中的存放次序一致。这种存贮方式称为顺序

10、方法(也称连续方法)。 为了能使存贮次序表达逻辑次序,显然,在存贮器中,任意相邻两数据元素之间的存贮单元数目应相等。,例 设有数据结构DS=(D,S),其中, D=d1, d2, d3, d4,S=r, r=, D中每个元素需占用两个存贮单元,则该结构的顺序存贮结构如下图所示(称存贮结构图).,二、链式结构 每个数据元素的存储区分两大部分,第一部分为数据区,存贮元素的内容,第二部分为指针区,存放该数据元素与其它数据元素之间的关系信息,这种关系信息一般为地址(与此数据元素相关的其他数据元素的存贮地址)。对于线性结构,指针区中可以只设一个地址;对非线性关系,可能需多个地址。另外需指出的是,数据元素

11、的存贮区之间,可以是连续的,也可不连续。 例 对上例中的数据结构,它的一种链式存储结构如表 11所示。 在该表中,假定每个元素占2个存储单元,第一个存储元素内容,第二个存储关系。这里,关系用后继地址描述,元素x的“关系指示”中存放x的后继的地址。,例 设数据结构为DS=(D,S),其中 D=d1, d2, d3, d4, d5, d6, S=r1, r2, r1=,, r2=, 它的一种链式存贮映象下表所示,三、索引存储 索引存储主要针对集合和线性表,面向检索(查找)操作。它主要是在数据结构的存储区(称数据区)外,增加一个(或若干个)索引区。 索引区本身也是个线性表或其他数据结构,结构中每个元

12、素用于记录数据区中一个(对稠密索引)或一组(对非稠密索引)元素的存储位置(起始位置)。 索引存储并不强调对关系的存储,而主要针对数据内容,所以,一般只适合集合结构或线性结构。,三、散列存储 散列存储(也称杂凑法)是一种按元素内容存储元素的方法。其基本思想是: 设置一个函数,称为散列函数:元素内容地址;规定元素内容到存储地址的映射; 存储时,通过散列函数求出元素的应存储的地址,按此地址存储; 读取时,通过散列函数求出元素的存储地址,按此地址读取; 与索引存储类似,散列存储也是面向内容存储,不适合存储复杂数据结构,1.7 数据结构访问接口,1.7.1 访问接口与逻辑结构数据的访问(也称操作)是指对

13、数据的读、修改、加工、处理等操作。数据存在的目的是进行操作。操作的种类很多,随不同的应用而不同。数据结构中的一个重要的问题是: 对每种数据结构,如何设置一些操作,使得各种应用都能通过这些操作就能实现对数据结构的各种操作,我们把这类操作称为数据结构的基本操作或运算。 操作的调用形式与规范,称为该操作的接口;将针对某一数据结构的基本操作的接口的全体,称为该数据结构的访问接口;,基本操作有下列关键点: 抽象性: 基本性: 完备性: 支撑性:,1.7.2 基本操作的种类尽管不同的数据结构对应不同的基本操作集合,但可按功能归纳为下列几种基本类型: 属性读取(Get): 属性设置(Set): 查找 插入

14、删除 关系访问 遍历,1.7.2 基本操作的实现 操作的实体是计算机程序,因此,基本操作的实现,是个针对相应的数据结构编程的问题。由于程序是算法的实现,所以可以讲操作实现也是算法实现问题,1.8 面向对象方法,在面向对象方法中,将问题世界中所涉及的实体抽象为对象(Objects), 每个对象,是对应的实体的一个抽象模型,它刻画实体的状态和行为状态称为对象的属性或数据成员,行为称为对象的方法或操作或服务,亦即对象由描述实体的状态的属性与用于改变自身状态的操作两大部分构成:对象 = 属性 + 操作 类是对象的型,它与数据类型的概念是类似的定义了对象的属性的取值范围与一组操作。每个类都是一批属性与结

15、构类似且操作相同的对象的抽象。由于类中含数据与操作两部分,所以它既可看作类型,又可看作模块。继承(下面即将介绍)的引入,会使这点更加明确。,一、面向对象方法要素 封装是指将数据与相应的操作作为一个整体看待。操作主要针对相应的数据,用于改变对象的状态。操作一般只改变相应的数据,不改变封装体(对象)外部的数据,使用者使用封装体时,只需知道访问操作,而无需顾及内部实现方法 这里的继承是指对象/类之间的继承。对两个对象/类 A 和 B ,A 的属性是B的属性的子集,A的操作在名称与调用界面(与实现方法无关)方面是B的操作的子集,则称B通过继承A而来,或曰B由A派生而来(B是A的派生物)。这说明,B可以

16、定义新的属性和操作,B共享A的所有属性,B可以重定义A中的操作(不改变名称与接口),如果没有重定义,B可以共享A中未被重定义的操作。,多态性译于Polymorphism一词,这里Poly是许多的意思,morphus 是采用某种格式的意思,这二者合起来的意思是:可采用多种形式的能力。在面向对象方法中,它的意思是:一个名字,多种语义;或相同界面,多种实现。 消息:系统实质上是一个以对象为状态的状态自动机,自动机中状态的变化,就是系统的运行。驱动状态的转化就称为消息(或称事件,有时区分事件与消息,将事件看作是消息序列(也称其为脚本)的总称),即对象状态的改变是消息传递的结果。这种情况也称事件驱动。,

17、1.8.3 面向对象方法的若干述评 (略) 1.8.4 面向对象程序设计语言 Simula Smalltalk Eiffel C+ Java C#,1.9 面向对象与数据结构,1.9.1 面向对象与数据结构的关系 数据结构主要强调两个方面的内容, a) 同类数据元素间的依赖关系; b) 针对这些依赖关系的基本操作:这些操作是充分的(完备的),依赖它们可以实现对这些具有特定关系的元素的任意访问。 这两个方面实质上是对象的雏形,萌芽着面向对象的思想。,对象与数据结构具有下列对应关系: 对象数据结构 属性数据元素间的关系的描述 方法基本操作 事件无,1.9.2 面向对象数据结构 面向对象数据结构从下列几个方面改造传统的数据结构: a) 将基本元素视为对象; b) 将元素间的关系视为对象; c) 将数据元素的集合视为对象; d) 对“相似”数据结构应用继承 e) 用继承机制扩展基本数据结构 f) 用面向对象的形式描述数据结构,1.9.3 数据结构的对象模型 元素对象模型 关系对象模型 数据结构对象模型,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 小学课件

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


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

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

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