数据结构
数据结构与算法是一门很古老的课程,但也是非常重要的一门课程。所以及时过了如此之久,仍然是计算机专业中的一门专业课,那我们就先开始第一门课吧~
数据结构的起源
人们早期将计算机理解为数值计算工具(感觉计算机当然是用来计算的),所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。
可现实中,我们更多的不是解决数值计算的问题,而是需要一些更科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好地处理问题。所以数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
数据结构的研究内容
当计算机用于处理数值计算的时候,一般会有以下几个步骤:
- 从具体问题中抽象出数据模型
- 设计一个可以用于此数学模型的算法
- 根据上述步骤编写一个程序
- 测试程序是否可以正常运行(无任何报错,如:编译报错(程序无法正常运行)、数学报错(分母为零)等)
- 当程序正常启动后,如果得不到想要的答案,则需要进行调试改错(
DeBug
)
在这个过程中寻找数学模型的本质就是分析问题,将操作对象从中提取出来,并且找到这些操作对象之间的关系,并且用数学语言进行描述(利用所学的数学知识及算法建立相应的方程)。
然而数据结构主要研究的时非数值运算的问题,非数值计算问题显然不能利用简单的数学方程建立数学模型。
如:学生管理系统、人机对弈问题、最短路径问题(如:1091. 二进制矩阵中的最短路径 - 力扣(LeetCode))。可以看出,这些计算问题的数学模型不再是数学方程,而是一些较为复杂的模型,如:线性表(学生管理系统可以使用链表进行实现)、解决人机对弈问题可以使用树的模型解决(如下图)、而最短路径则需要更为复杂的图模型进行解决(如:BFS(广度优先搜索)、DFS(深度优先搜索))。
数据结构的基本概念和术语
下面将简单介绍数据结构中包含的几个专业术语。
术语
数据
(Data):是客观事物的符号表示,简单来说,就是所有能输入进计算机并且能被计算机程序处理的符号(如:聊天时的消息、游戏中的装备、自己的快递地址等都可以理解为一条数据)
数据元素
(Data Element):是数据的基本单位,如:网购的一条记录、游戏货币的一条流水等都是其中数据的一个元素。
数据项
(Data Item):组成数据元素,具有独立意义、且不可分割的最小单位。如:快递地址中的电话号码、学生管理系统中的一个学生的学号、姓名等都是数据项。
数据对象
(Data Object):性质相同的数据元素的集合,是数据的一个子集。如高中所学的整数集N、学生信息表等都是一个数据对象。只要集合内的元素性质
均相同,都可以称之为一个数据对象。
数据结构
数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元素的集合。换合话说,数据结构是带“结构”的数据元素的集合,
“结构”就是指数据元素之间存在的关系。
数据结构包括逻辑结构
和存储结构
两个层次。(摘抄至课本第四页)
逻辑结构
数据的逻辑结构是从逻辑关系上描述数据。它是独立于计算机的,与数据的存储无关。所以,数据的逻辑结构可以看作从具体问题中抽象出来的数据模型。
数据的逻辑结构有两个要素:数据元素和关系。
数据的逻辑结构通常有4个基本的逻辑结构:
- 集合结构
2. 线性结构
3. 树结构
4. 图结构
存储结构
数据对象在计算机中的存储表示称为数据的存储结构
,也称为物理结构
。把数据对象存储到计算机时,通常要求既要存储各数据元素的数据,又要存储数据元素之间的逻辑关系,数据元素在计算机内用一个节点来表示。数据元素在计算机中有两种基本的存储结构,分别是顺序存储结构和链式存储结构。
顺序存储结构
顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系的(如数组)。下面将列出一部分学生信息表作为例子(截取至教材第五页的表格)。
学号 | 姓名 | 性别 | 籍贯 | 专业 | 内存地址(二进制) |
---|---|---|---|---|---|
060214201 | 杨阳 | 男 | 安徽 | 计算机科学与技术 | 0011 0010 |
060214202 | 薛林 | 男 | 福建 | 计算机科学与技术 | 0110 0100 |
060214215 | 王诗萌 | 女 | 吉林 | 计算机科学与技术 | 1001 0110 |
链式存储结构(链表)
顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无占用一整块存储空间。但为了表示节点之间的关系,需要给每个节点附加指针字段,用于存后继元素的存储地址。所以链式存储结构通常借助于程序设计语言的指针类型来描述。下图则是将上面的表格变成了链式存储。
到此,本节课的内容学习完啦~