- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构概述 数据结构(Data Structure) 数据结构是研究数据元素(Data Element)之间抽象化的相互关系(逻辑结构)和这种关系在计算机中的存储表示(物理结构),并对这种结构定义相适应的运算,设计出相应的算法。 数据结构主要指逻辑结构和物理结构。 1. 逻辑结构: 数据之间的相互关系称为逻辑结构。通常分为 4 类基本结构: 集合 结构中的数据元素除了同属于一种类型外,别无其它关系。 线性结构 结构中的数据元素之间存在一对一的关系。 树型结构 结构中的数据元素之间存在一对多的关系。 图状结构或网状结构 结构中的数据元素之间存在多对多的关系。 * 硅谷嵌入式教育 真实项目为依托 四类数据基本结构的示意图: (a)集合结构 (b)线性结构 (c)树型结构 (d)图形结构 由以上例子可见,描述这类非数值计算问题的数学模型和方法不再是数学方程,而是诸如线性表、树和图之类的数据结构。 数据对象可以是有限的,也可以是无限的。 数据结构不同于数据类型,也不同于数据对象,它不仅要描述数据类型的数据对象,而且要描述数据对象各元素之间的相互关系。 2. 存储结构: 数据结构在计算机中的存储表示称为数据的存储结构。它包括数据元素的表示和关系的表示。 表1-1所示的表格数据在计算机中可以有多种存储表示: 数据既可以存放在一块连续的内存单元中,通过元素在存储器中的位置来表示它们之间的逻辑关系(顺序); 也可以随机分布在内存中的不同位置,通过指针元素表示数据元素之间的逻辑关系(链式)。这两种不同的表示方法对应有四种不同的存储结构(亦称方式): 顺序存储结构、链式存储结构、索引存储结构和散列存储结构。 (1)顺序存储结构是把逻辑上相邻的结点存储在物理上相邻的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。 优点:占用较少的存储空间; 缺点:由于只能使用相邻的一整块存储单元,因此可能产生较多的碎片现象。 顺序存储结构通常借助程序语言中的数组来描述。 顺序存储结构主要应用于线性的数据结构。 (2) 链式存储结构将结点所占的存储单元分为两部分,一部分存放结点本身的信息,另一部分存放结点的后继结点地址,结点间的逻辑关系由附加的指针字段表示。 链式存储结构常借助于程序语言的指针类型描述。 优点:不会出现碎片现象,充分利用所有的存储单元; 缺点:每个结点占用较多的存储空间。 (3)索引存储方式是用结点的索引号来确定结点的存储地址。 在储存结点信息的同时,要建立附加的索引表。 优点:检索速度快。 缺点:增加了附加的索引表,占用较多的存储空间;在增加和删除数据时需要修改索引表而花费较多时间。 (4) 散列存储方式是根据结点的关键字值直接计算出该结点的存储地址。通过散列函数把结点间的逻辑关系对应到不同的物理空间。 优点:检索、增加和删除结点的操作都很快; 缺点:当采用不好的散列函数时可能出现结点存储单元的冲突,为解决冲突需要附加时间和空间的开销。 3.数据的运算 数据运算定义在数据的逻辑结构上,即施加于数据的操作。 例如对一张表的记录进行查找、增加、删除、修改,这就是对数据的运算。 4.数据结构三方面的关系 数据的逻辑结构、数据的存储结构及数据的运算三方面构成一个数据结构的整体。 存储结构是对数据项的存储。同一逻辑结构可用不同存储结构就对应不同的存储标识。 例如,线性表若采用顺序存储方式,称为顺序表;若采用链式存储方式,称为链表;若采用散列存储方式,可称为散列表。 2、算法的特点 算法是执行特定计算的有穷过程。这个过程有5个特点: 1) 动态有穷:当执行一个算法时,不论是何种情况,在经过了有限步骤后,这个算法一定要终止。 2) 确定性:算法中的每条指令都必须是清楚的,指令无二义性。 3) 输入:具有0个或多个由外界提供的量(输入)。 4) 输出:产生1个或多个结果。 5) 可行性:每条指令都充分基本,即:序列中的每个操作都是可以简单完成的,都可以通过已经实现的基本操作运算的有限次来实现。 注意:算法和程序是有区别的,即程序未必能满足动态有穷。在本书中只讨论满足动态有穷的程序,因此“算法”和“程序” 是通用的。
文档评论(0)