数据结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

书名 计算方法
作者 唐珍
出版社 高等教 育 机械工 业 高等教 育 清华大 学 中央电 大
定价 4.80
00001
00002
00003 00004
计算机辅助 制造 C++程序设计 基础 数据结构 计算机应用 基础
00005
李德 庆 张基 温 严蔚 敏 王利
3.30
17.0 0 6.05
8.05
表的第一行为表目行或目录行,它给出了该表 中每条记录的结构。从表目行向下的每一行为一条 记录,它给出了一本图书的有关信息;每一列为一 个数据项,它描述了图书中的一种属性。每条记录 由6个数据项组成,其名称分别为登录号、书号、书 名、作者、出版社和定价。在这里,每条记录就是 一个数据元素。 从这个例子可以看出,一个数据对象是由若干 个数据元素组成的,每个数据元素又是由若干个数 据项组成的。数据元素有时也称为结点或记录。
• 姜斌 • whkunyushan@163.com • 答疑时间:周四下午
王国维的《人间词话》
古今之成大事业、大学问者,必经过三 种之境界: ‘昨夜西风凋碧树,独上高楼,望尽天 涯路’,此第一境也; ‘衣带渐宽终不悔,为伊消得人憔悴’, 此第二境也; ‘众里寻他千百度,蓦然回首 ,那人却 在灯火阑珊处’,此第三境也。
B D, R
其中:D是数据元素的有限集,R是D上关系的有限集。
D k i 0 i n, n 0
R r j 0 j m, m 0
数据元素之间的相互关系称之为数据的逻辑结 构,也经常简称为数据结构。它是从数学的角度 来描述数据之间的相互关系的。 数据元素之间往往存在着多种关系,一个关系 可以用一个序偶来表示,即r=<x,y>。我们把x叫 做序偶的第一元素,y叫做序偶的第二元素,又 称序偶的第一元素为第二元素的直接前驱(通常 简称前驱),称第二元素为第一元素的直接后继 (通常简称后继)。如在<x,y>的序偶中,x为y 的前驱,y为x的后继。
抽象数据类型的好处是显而易见的。它实现了信 息隐蔽,符合“模块化”程序设计的要求,也是面 向对象程序设计思想的体现。这为设计和实现复杂 的大型程序提供了强有力的支持,便于软件的工业 化生产,提高了软件的复用性。 一个含抽象数据类型的软件模块通常应包含定义 、表示和实现三个部分。抽象数据类型可细分为下 列三种类型:
(1) 顺序存储方式
顺序存储方法是把逻辑上相邻的结点存储在物 理位置上相邻的存储单元里,结点间的逻辑关系 由存储单元的邻接关系来体现。由此得到的存储 表示称为顺序存储结构。通常顺序存储结构是借 助于程序设计语言的向量来表示的。 顺序存储方法主要应用于线性的数据结构,非 线性的数据结构也可以通过某种线性化的方法来 实现顺序存储。
数据(Data) 是对客观事物的符号表示,在计 算机科学中是指所有能输入到计算机中并被计算 机程序处理的符号的总称。例如,整数、实数、 字符、文字、逻辑值、图形、图像、声音等都是 数据。数据是信息的载体,在对客观事物的描述。 数据元素(Data Element) 是数据的基本单位 ,在计算机程序中通常作为一个整体进行考虑和 处理。例如数组就是由相同类型的若干数据元素 组成的。
数据项: 是数据结构中讨论的最小单位
数据元素可以是数据项的集合
例如:描述一个运动员的数据元素可以是
姓名 俱乐部名称 出生日期 参加日期 职务 业绩
年月日
称之为组合项
数据结构(Data Structure) 是相互之间存 在一种或多种特定关系的数据元素的集合。根据数据 元素之间关系的不同特性。数据结构的形式定义为: 数据结构是一个二元组
寻求数学模型的实质是分析问题,从中提取 操作的对象,并找出这些操作对象之间的关系, 然后用数学的语言加以描述。例如,利用基尔霍 夫定律求解线性稳态电路问题,其数学模型是线 性方程组;预报人口增长情况的数学模型为微分 方程。但是,更多的非数值计算问题无法用数学 方程加以描述。
例1-1 图书馆的书目检索系统自动化问题。在图 书馆内有各种名目的卡片,有的按书名编排,有 的按作者编排,还有的按分类编排,等等。
例1-6 复数的抽象数据类型定义。
ADT Complex{ 数据对象:D={r,i|r,i为实数} 数据关系:R={<r,i>} 基本操作: InitComplex(re,im); //构造一个复数 DestroyCmoplex(); //销毁复数 IsAscending();//如果复数的两个元素按升序排列, //则返回1,否则返回0 IsDescending(); //如果复数的两个元素按降序排列, //则返回1,否则返回0 Max(&e); //用e返回复数的两个元素中值较大的一个 Min(&e); //用e返回复数的两个元素中值较小的一个 }ADT Complex
抽象数据类型(Abstract Data Type,简称ADT) 是指一个数学模型以及定义在该模型上的一组操作。 抽象数据类型的定义仅取决于它的一组逻辑特性, 而与其在计算机内部如何表示和实现无关,即不论 其内部结构如何变化,只要它的数学特性不变,都 不影响其外部的使用。
抽象数据类型和数据类型实质是一个概念。但 抽象数据类型的含义更广,抽象程度更高,更符合 面向对象程序设计对数据的要求。一般数据类型由 具体语言系统内部定义,直接提供给编程者定义用 户数据,因此称它们为预定义数据类型。 抽象数据类型通常由编程者定义,包括定义它 所使用的数据和在这些数据上所进行的操作。在定 义抽象数据类型中的数据部分和操作部分时,要求 只定义到数据的逻辑结构和操作说明,不考虑数据 的存储结构和操作的具体实现,这样抽象层次更高, 更能为其他用户提供良好的使用接口。
例1-2 计算机和人对弈问题。
如图是井字棋对弈的一个格局及其可能派生 出的几个格局,这可以形象地看做一颗树,树根 是当前格局,树叶是派生出的格局。这种数据结 构称为树形结构。
综上可见,描述这类非数值计算问题的数学模 型不再是数学方程,而是诸如表、树和图之类的数 据结构。 因此,简单说来,数据结构是一门研究非数值计算 的程序设计问题中计算机的操作对象以及它们之间 的关系和操作等等的学科。
。 数据对象(Data Object) 是性质相同的数据元 素的集合,是数据的一个子集。例如整数数据对 象是集合 N 0,1,2, ;电话号码查找系统 中,数据对象就是全体的电话用户。
例1-4 如表1-1所示是一个图书目录表,是一个 需要用计算机进行处理的数据实体。
登录号
书号 ISBN 7-04003907/TP.103 ISBN 7-111-032470/TP.158 ISBN 7-04-0056550/TP.312 ISBN 7-302-009848/TP.363 ISBN 7-304-005432/TP.27
抽象数据类型和具体的语言是无关的,是一种 纯数学意义上的数据类型或数据模型。由于采用抽象 数据类型的观点讨论数据结构,数据结构的具体实现 对外是不可见的,能够看到的只是有这样一个数据类 型,它具有所期望的若干性质,提供了希望的各种操 作。使用这个类型可以定义实际需要的数据对象,并 且通过类型上的操作处理这些对象。
例1-7 一种数据结构Set=(D,R),其中 D={1,2,3,4,5,6,7,8,9} R={ } 在数据结构Set中,只存在有元素的集合,不 存在有关系的集合。显然,这是一种集合类型的数 据结构。对于集合类型的数据结构,经常可以看作 按任一次序排列的线性结构,在存储器中可以根据 实际需要按任一种存储方式进行存储。
和数据结构的形式定义相对应,抽象数据类 型可用以下三元组表示
D, S , P
其中,D是数据对象,S是上的关系集,P是对D 的基本操作集。
抽象数据类型伪程序语言格式为 ADT 抽象数据类型名{ 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本操作:<基本操作的定义> } ADT抽象数据类型名
数据的来自百度文库辑结构可归结为以下四类:
集合结构 线性结构
树形结构 图状结构
从图形结构、树形结构和线性结构的关系可以 看出,树形结构是图形结构的特殊情况,线性结构 是树形结构的特殊情况。为了区别于线性结构,我 们把树形结构和图形结构统称为非线性结构。
前面都是从逻辑上观察分析数据元素之间的关 系。但数据结构需要用计算机处理,必须把数据结 构存入计算机的存储单元中。数据结构在计算机中 的表示(又称映象),称为数据的存储结构或物理 结构,它包括数据元素的表示和关系的表示。
1.2 基本概念和术语
• 简单来说,数据结构可以认为是数 据之间的相互关系。在计算机处理数据 的过程中,大批量的数据并不是彼此孤 立,杂乱无章的,它们之间有内在的联 系。只有利用这些客观存在的关系,把 各数据元素有机地组织起来,才有可能 对这些数据进行处理,或者说才有可能 对这些数据进行有效地处理。
为了简化图的表示,我们将<x,y>和<y,x>这两个对 称序偶用一个无序对(x,y)或(y,x)来代替。这样就可 以把x结点和y结点之间两条相反的有向边用一条无 向边来代替,如图1.7所示。这样,关系可以改写为 r={(1,2),(1,4),(2,3),(2,6),(2,7), (3,7),(4,6),(5,7)}
图1.5 数据的树形结构示意图
例1-10 一种数据结构Graph={D,R},其中 D={1,2,3,4,5,6,7} R={r} r={<1,2>,<2,1>,<1,4>,<4,1>,<2,3>,<3,2>, <2,6>,<6,2>,<2,7>,<7,2>,<3,7>,<7,3>, <4,6>,<6,4>,<5,7>,<7,5>} 对应的图形如图所示。
例1-8 一种数据结构LineList={D,R},其中 D={1,2,3,4,5,6,7,8,9} R={r} r={<5,1>,<1,3>,<3,8>,<8,2>,<2,7>,<7,4>, <4,6>,<6,9>} 对应的图形如图所示。
图1.4 数据的线性结构示意图
例1-9 一种数据结构Tree={D,R},其中 D={1,2,3,4,5,6,7,8,9} R={r} r={<1,2>,<1,3>,<1,4>,<2,5>,<2,6>,<3,7>, <3,8>,<3,9>} 对应的图形如图所示
• Why? • What is DS? • How?
Niklaus Wirth:
Algorithm + Data Structures = Programs
程序设计: 算法: 数据结构:
为计算机处理问题编制 一组指令集 处理问题的策略 问题的数学模型
1.1 什么是数据结构
• 一般来说,用计算机解决一个具体问题 时,大致需要经过下列几个步骤: • 首先要从具体问题出发,抽象出一个适 当的数学模型,然后设计一个解此数学 模型的算法,最后编出程序,对程序进 行调试,直至得到问题的解。
(2) 链接存储方式
链接存储方法不要求逻辑上相邻的结点其物理 位置上也相邻,它不仅存储结点的值,而且还存储 结点之间的关系。它利用结点附加的指针字段,存 储其后继结点的地址。链式存储结构是借助于高级 语言中的指针类型来实现的。
(3) 索引存储方式
索引存储方法是在存储结点信息的同时,还建立 附加的索引表,索引表中的每一项称为索引项,通过 索引项再进一步确定结点的实际存储地址。这和我们 通过目录查找书的内容相似,目录可以认为是索引表, 而书中每一节的内容则是结点值。索引项的一般形式 是: (关键字,地址) 关键字是能唯一标识一个结点的那些数据项。例 如对于书的目录来说,章节编号就是关键字,页码就 是结点的地址值。
(4) 散列存储方式
散列存储方法是根据结点的关键字直接计算出 该结点的存储地址。 上述四种基本的存储方法也可以组合起来对数 据结构进行存储映像。同一种逻辑结构采用不同 的存储方法,可以得到不同的存储结构。选择何 种存储结构来表示相应的逻辑结构,主要是使其 运算方便及根据算法的时间复杂性和空间复杂性 来具体确定。
1.4 抽象数据类型的表示与实现
数据类型(Data Type)是对数据的取值范围、 数据的结构以及允许施加操作的一种描述。每一 种计算机高级语言都定义有自己的数据类型。在 通用的计算机高级语言中,一般都具有整数、实 数、枚举、字符、字符串、指针、数组、记录、 文件等数据类型。按照其复杂程度的不同,通常 可以把它们分为两大类:简单类型(或原子类型) 和结构类型。
相关文档
最新文档