数据结构是什么
在说数据结构是什么之前,要先说一下什么是数据。
什么是计算机?计算机就是用来计算数据的,只是说随着计算机的发展,功能越来越丰富。但说到底计算机就是用于计算数据的。
数据 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
概念定义比较抽象,那可以想一下有哪些数据?数据不仅仅包括整型数等数值类型,还包括字符、声音、图像、视频等非数值类型。也就是说这里的数据其实就是符号,而且这些符号必须具备两个前提:可以输入到计算机中,能被计算机程序处理。
对于整型这类数值类型可以进行数值运行,对于字符数据类型,就需要进行非数值的处理,而声音、图像、视频等其实是可以通过编码的手段编程字符数据来处理的。
数据是一个比较宽泛的概念。而我们平时中处理的数据其实是有一些比较细致的划分的所采用的数据结构,例如:
数据元素: 是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。
数据项 : 一个数据元素可以由若干个数据项组成。
举个例子:人是数据,牛,机器,车都是数据。所以数据的概念是很宽泛的。
而具体到一个人的信息数据就叫做是数据元素。而后面所说的数据之间的关系中数据指的是这里的数据元素。
一个人的信息数据有姓名所采用的数据结构,年龄所采用的数据结构 数据结构基础概念,性别等数据,这就称为是数据项。
因此可以将其关系理解为:
数据、数据元素、数据项的关系
结构
结构,简单的理解就是关系,比如分子结构,就是说组成分子的原子之间的排列方式。严格点说,结构是指各个组成部分相互搭配和排列的方式。
现实世界中,不同数据元数之间不是独立的,而是存在特定的关系,我们将这些关系称为结构。
数据结构
那么数据结构是什么呢
数据结构:是相互之间存在 一种或多种特定关系的数据元素集合 。
简单说就是存在关系的数据元数集合。而我们要研究的就是他们之间的关系。
数据结构的应用
上面所说的概念好像非常的陌生,离我们好像很远。但是其实不远的,在我们的计算机中,生活中处处都有数据结构的身影。
一般来说,使用计算机解决具体问题时,通常需要几个步骤:
分析具体问题得到数学模型 设计解决数学模型的算法 编制程序并调 最后得到最终答案
其中第一步要想得到数学模型,必须了解数据之间的关系。
比如说要管理班级学生信息。如果连在计算机中如何表示、存储学生信息都无法得到解决的话,那就更不用说去处理学生之间各种复杂的关系了。于是对于学生信息这种数据我们可以使用表来存储学生的数据。
而这种存储方式就是数据结构中逻辑存储的线性表的方式。
以及我们计算机中使用的文件系统中的文件管理也使用到了数据结构中的树形结构
数据结构的应用就在很多细微的地方。我记得之前在做课设的时候需要做到一个 UI 界面,我想弄一个类似以及目录二级目录的东西,但是对 UI 组件不是很熟练,因此不知道如何去实现它,最后问了老师,才知道有一种树形组件可以解决我这个问题。当时还似懂非懂,后面学了数据结构,才发现很多应用的底层就是这些数据与数据之间的关系。
逻辑结构和物理结构
数据结构可以根据不同的视点将其分为逻辑结构和物理结构。
逻辑结构 逻辑结构:是指数据对象中数据元素之间的相互关系。
逻辑结构也是平时我们接触最多的也是最需要关注的问题,例如有什么集合结构,线性结构,树形结构,图形结构都是逻辑结构。逻辑结构关注的是数据元数之间的关系。
集合结构
集合机构中的数据元数除了同属于一个集合外,他们之间没有其他关系。各个数据元素是“平等”的,他们的共同属性是“同属于一个集合”
集合结构
线性结构
线性结构中的数据元数之间是一对一的关系
线性结构
树形结构
树形结构中的数据元素之间存在一种一对多的层次关系
树形结构
图形结构
图形结构的数据元素是多对多的关系
图形结构
物理结构
而如果从计算机如何存储数据的角度上来看的话,还有一个物理结构。
物理结构:是指数据的逻辑结构在计算机中的存储形式。
物理结构很多书籍也将其叫做存储结构。其关注的是一个数据是如何存储在计算机中的,又如何去正确的反映数据元素元素之间的逻辑关系,怎样实现数据元素间的逻辑关系,是实现物理结构的重点和难点。数据元素的存储结构形式有两种:顺序存储和链式存储。
顺序存储结构
顺序存储结构是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。可以将其理解为普通的数组。也可以理解为现实中的占位排队。
顺序存储结构
链式存储结构
链式存储结构是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
而这样的数据元素的存储关系并不能反映其逻辑关系,因此需要用指针存放数据元素的地址,这样通过地址就可以找到想关联数据元素的地址。
链式存储结构总结
所以可以看出逻辑结构和物理结构之间并不是对立的,而是相辅相成的。逻辑结构是体现在表面与用户进行接触交互的。而物理结构负责跟计算机打交道,正确的将逻辑结构映射到计算机的存储上面。
会发现物理结构只有两种,而逻辑结构却有很多种,因此物理结构如何反应逻辑结构,这个数据结构应该如何设计也是一件非常有意思的事情。