一、数据结构起源
年,美国的高德纳(DonaklE.Knuth)教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统地阐述了数据的逻辑结构和存储结构及其操作,开创了数据结构的课程体系。同年,数据结构作为一门独立的课程,在计算机科学的学位课程中开始出现。
之后随着软件的发展,越来越需要一种好的结构和算法表达,来提高程序的运行效率,所以数据结构在程序设计中占有越来越重要的地位
二、基本概念和术语
数据
数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号几何。不仅包括整型、浮点型等数值类型,还包括字符及声音,图像,视频等非数值类型
这里所说的数据要求可以输入计算机中并能被计算机程序处理
数据元素
数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录
比如人类中的一个人
数据项
一个数据元素可以由若干个数据项组成。
比如人这样的数据元素,可以有眼,耳,鼻,嘴等这些数据项,也可以有姓名,年龄,性别等数据项,具体有哪些数据项,要看你做的系统来决定
数据项是数据不可分割的最小单位。在数据结构中我们把数据项定义为最小单位,有助于我们更好地解决问题。当真正讨论问题时,数据元素才是数据结构中建立数据模型的着眼点。
数据对象
数据对象是性质相同的数据元素的集合,是数据的子集
比如人都有姓名,生日,性别等相同的数据项
数据结构
结构,简单的理解就是关系,比如分子结构,就是说组成分子的原子之间的排列方式。
是指相互之间存在一种或多种特定关系的数据元素的集合。
三、逻辑结构和物理结构
1.逻辑结构
逻辑结构是指数据对象中数据元素之间的相互关系
1)集合结构集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。各个数据元素是“平等”的,它们的共同属性是“同属于一个集合”。数据结构中的集合关系就类似于数学中的集合。
如果将紧密相关的数据组合到一个集合中,则能够更有效地处理这些紧密相关的数据。代替编写不同的代码来处理每一单独的对象,您可以使用相同的调用代码来处理一个集合的所有元素。
2)线性结构线性结构:线性结构中的数据元素之间是一对一的关系。
线性结构中的数据元素之间是一种线性关系,数据元素一个接一个地排列。如排除的队列、表格中一行行的记录等。
3)树形结构树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。
树形结构是一层次的嵌套结构。
)图形结构图形结构:图形结构中的数据元素是多对多的关系。
图形结构的数据元素之间存在着多对多的关系,也称网状结构。
从上面的例子也可以看出,逻辑结构是针对具体问题的,是为了解决某个问题,在对问题理解的基础上,选择一个合适的数据结构表示数据元素之间的逻辑关系。
2.物理结构
数据除了有前面说的逻辑结构,还分为物理结构。那么这个物理结构又是什么回事呢?物理结构在很多书中也叫做存储结构,不过你只要在理解上把它们当一回事就可以了。
物理结构:是指数据的逻辑结构在计算机中的存储形式。
数据是数据元素的集合,那么根据物理结构的定义,实际上就是如何把数据元素存储到计算机的存储器中。存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。
数据的存储结构应正确反映数据元素之间的逻辑关系,这才是最为关键的,如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点。
数据元素的存储结构形式有两种:顺序存储和链式存储。
1)顺序存储结构顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
这种存储结构其实很简单,说白了,就是排队占位。大家都按顺序排好,每个人占一小段空间,大家谁也别插谁的队。我们之前学计算机语言时,数组就是这样的顺序存储结构。当你告诉计算机,你要建立一个有9个整型数据的数组时,计算机就在内存中找了片空地,按照一个整型所占位置的大小乘以9,开辟一段连续的空间,于是第一个数组数据就放在第一个位置,第二个数据放在第二个,这样依次摆放。
2)链式存储结构如果就是这么简单和有规律,一切就好办了。可实际上,总会有人插队,也会有人要上厕所、有人会放弃排队。所以这个队伍当中会添加新成员,也有可能会去掉老元素,整个结构时刻都处于变化中。显然,面对这样时常要变化的结构,顺序存储是不科学的。那怎么办呢?
现在如银行、医院等地方,设置了排队系统,也就是每个人去了,先领一个号,等着叫号,叫到时去办理业务或看病。在等待的时候,你爱在哪在哪,可以坐着、站着或者走动,甚至出去逛一圈,只要及时回来就行。你