中年|C/C++编程笔记:从数据处理的角度,浅析大学课程—数据结构


对于计算机行业 , 说到数据处理 , 就不得不提到数据结构 , 它也是对软件开发和考研都有非常非常重要作用的一门课程 。
中年|C/C++编程笔记:从数据处理的角度,浅析大学课程—数据结构
本文插图

那么什么是数据结构?在这个问题之前 , 我们先来研究另外一个问题:计算机的作用是什么?
可以这样简单的总结为:计算机的作用就是通过各种各样的程序 , 处理形式多样的数据 。
【中年|C/C++编程笔记:从数据处理的角度,浅析大学课程—数据结构】这里有两个关键字 , 一个是数据 , 一个是处理 。
中年|C/C++编程笔记:从数据处理的角度,浅析大学课程—数据结构
本文插图

所以我们可以进一步思考:我们要处理的数据又有哪些具体的形式?对于某种形式的数据可以进行怎样的处理?
假如 , 我们想要开发一个图书馆的图书管理系统 。 联想我们提及的关键字 , 一个是数据 , 一个是处理 。 显然 , 我们需要面对的数据就是图书馆中各种各样的图书信息 , 而这些藏书的信息可以被总结归纳为一张表格 。
而我们拿到这样一张表格 , 面对浩如烟海的藏书信息 , 我们能够进行什么处理?
对于一个图书管理系统 , 我们所期待的数据处理 , 主要包括:输入、输出、查询、排序……

具体到某一种操作 , 比如说顺序查找、折半查找、索引查找等等 , 这些处理如何实现呢?或者说:这些操作的算法如何呢?
中年|C/C++编程笔记:从数据处理的角度,浅析大学课程—数据结构
本文插图

考虑好要处理的数据 , 考虑好操作的实现方式 , 再结合语言基础 , 把中文表述翻译成C语言 , 其实就是我们写程序的过程 。
从某种角度上看来 , 程序就是算法加数据结构 。
再比如 , 开发一个学生信息管理系统 。 处理的数据就变成了学生对应的信息 , 但是对这些数据想要进行的操作还是换汤不换药 , 无非就是增删改查操作 。 从本质上讲 , 这个系统和图书管理其实就是一回事 。
从这两个简单的例子里面 , 应该可以明显地察觉到:我们所做的第一件事情 , 其实就是把实际问题抽象为数据模型 。
中年|C/C++编程笔记:从数据处理的角度,浅析大学课程—数据结构
本文插图

只不过这种数学模型不是方程组 , 不是微分方程 , 而是一张表格 , 里面填满了我们关心的数据指标 , 或者是一张图 , 各个元素之间有某种指向 , 可以研究指向的规律 。
经研究发现 , 从外表上形式千差万别的数据 , 如果按照数据间的邻接关系来划分 , 所有的数据一定可以归为四种结构之一:

(1)线性结构这是一组数据的集合 , 它们之间存在这样一种邻接关系 , 第一条数据无前导 , 最后一条数据无后继 , 中间所有的元素满足一前导一后继的条件 。
(2)树状结构用图示的方法表示像是一个家谱图 , 圆圈可以表示数据 , 而连线表示数据之间的邻接关系 。 根据层次的不同 , 把数据分为前后 。 对树状结构 , 有一个最明显的特征 , 最高的层次只有一个节点 , 它被称为树的根;对于中间层次 , 它只有一个前导 , 而可以有多个后继;对于最后一个层次 , 它同样也是只有一个前导 , 但是没有后继 , 也被形象地称为叶子 。
(3)图结构(网状结构)用图示的方法表示更像是一个地图 , 最明显的特征是对于每一个节点而言 , 都有可能有多个前导多个后继 。
(4)集合结构对于每一条数据而言 , 两两之间都没有邻接关系 , 所有数据散落在表格之中 , 每一条数据既无前导 , 也没有后继 。
中年|C/C++编程笔记:从数据处理的角度,浅析大学课程—数据结构


推荐阅读