数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学课。
计算机处理问题的过程,其实就是处理数据的过程,计算机解决一个具体问题的步骤[1]:
(1)分析问题,确定数据模型。
(2)设计相应的算法。
(3)编写程序,运行并调试程序直至得到正确的结果。
程序设计 = 数据结构 + 算法
(Program = Data Structure + Algorithm)
数据结构(Data Structure) 是数据的组织结构,用来组织、存储数据。
算法(Algorithm) 就是解决问题的方法或者过程。
一、从数据中抽象出数据结构
处理问题需要从数据入手来分析,进而得到解决问题的方法,首先对数据结构化。
数据:是指所有能输入到计算机并被计算机程序处理的符号的介质的总称,是用于输入电子计算机进行处理,具有一定意义的数字字母、符号和模拟量等的统称。比如在游戏当中你拥有的人物角色、装备、等级、金币等,这些都是数据,而且这些数据分为多种不同类型存储在计算机里。
数据元素:是指按某一标准对数据进行归类而划定的一个最小单位,它包含了一定的意义,可作为一个整体处理。比如人类,人就是数据元素。
数据项:是数据元素的单个成员项,也就是说一个数据元素是由若干个数据项组成的。比如人这个数据元素,可以有眼睛、耳朵等数据项,也可以有姓名、年龄等数据项。
多个有关系的数据项组成一个数据元素,众多的数据元素组成了大量的数据。
数据对象:我们处理分析数据的时候,一般会从大量数据中选取性质相同的有限个数据元素,组成一个集合,作为研究对象,称为数据对象。数据对象是性质相同的有限个数据元素的集合,它是数据的一个子集。如大写字母数据对象是集合C={'A','B','C',…,'Z'};1~100的整数数据对象是集合N={1,2,…,100}。
数据结构:是指所涉及的数据元素以及数据元素之间的关系,可以看作是相互之间存在着特定关系的数据元素的集合。
比如考试的排名,老师会按照成绩多少做成一个顺序排列的表格,从第一名到最后一名,按顺序排列下来。其实这就是一种数据结构,叫做顺序表。数据对象就是每个人的排名情况,包括名次、姓名、成绩等等。结构就是名次的顺序排列,每个人只有一个前名次和后名次(第一名和最后一名除外)。
数据结构分别为逻辑结构、存储结构(物理结构)和数据的运算。
二、数据结构的逻辑结构
逻辑结构是指数据元素之间的相互关系,它是独立于计算机的。通常分为四类结构:
集合:结构中的数据元素除了同属于一种类型外,别无其它关系。
线性结构:结构中的数据元素之间存在一对一的关系。定义了线性关系。
树型结构:结构中的数据元素之间存在一对多的关系。定义了层次关系。
图状结构:结构中的数据元素之间存在多对多的关系。定义了网状关系。
1.集合结构:单个数据元素之间没有任何关系(一盒糖)。
2.线性结构:定义了线性关系,数据元素存在一对一的相互关系。(排队)
3.树形结构:定义了层次关系,数据元素存在一对多的相互关系。(家庭成员)
4.图形结构:定义了网状关系,数据元素存在多对多的相互关系。(公交站)
三、数据结构的存储结构
也就是元素如何存储的,存储结构又称为物理结构。它是面向程序员的。存储结构分为顺序结构,链式结构,索引结构,散列结构。
1.顺序存储结构:借助数据元素之间的相对位置来表示元素之间的逻辑结构
2.链式存储结构:借助数据元素之间的元素的指针表示数组元素的逻辑结构
3.散列存储结构:顺序存储+算列
4.索引存储结构:顺序存储+索引
逻辑结构与存储结构关系图:
四、数据的运算[3]
1.数据的运算
是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更和排序等。例如,对于高等数学成绩表这种数据结构,可以进行一系列的运算:增加一个学生成绩记录、删除一个学生成绩记录、求所有学生的平均分、查找序号为i的学生分数等。
2.数据类型
指一组性质相同的值的集合及定义在此集合上的一些操作的总称。可将数据类型分为两类:
原子类型:不可以再分解的基本类型,整型、实型、字符型等。
结构类型:由若干个类型组合而成,可以再分解。
五、参考资料
[1]: https://baijiahao.baidu.com/s?id=1687302279709228125