文章来源 https://blog.csdn.net/zhangjiehuan/article/details/93381331
数据结构是数据的组织形式,可以用来表征特定的对象数据。在计算机程序设计中,操作的对象是各式各样的数据,这些数据往往拥有不同的数据结构,例如数组、结构体、联合、指针和链表等。
1. 基本概念
数据:数据是信息的载体,能够被计算机识别、存储和加工处理。数据包括的类型很广泛,如基本的整数、实数等,还包括声音、视频、图形等非数值类型。
数据元素:数据的基本单位,一个数据元素包含若干个数据项,数据项也叫字段、域、属性,数据元素也称为记录。
数据对象:性质相同的数据元素的集合。
数据结构:计算机中对数据的一种存储和组织方式。
2. 数据结构内容
数据结构包含3个方面的内容:
- 数据的逻辑结构:即数据元素之间的逻辑关系,可看做是从具体问题抽象出来的数学模型。
- 数据的存储方式:数据元素及其逻辑关系在计算机存储器中的表现形式。
- 数据的运算:对数据施加的操作。
2.1 举例
仅仅通过概念定义还是很难理解,下面举个例子
学号 | 姓名 | 数学 | 物理 | 化学 |
1001 | 张三 | 90 | 89 | 84 |
1002 | 李四 | 92 | 85 | 87 |
1003 | 陈五 | 83 | 91 | 86 |
... | ... | ... | ... | ... |
1045 | 王六 | 88 | 86 | 92 |
下面用数据结构的语言来描述这些逻辑关系。
- 对表中任意一个结点,直接前驱结点最多只有一个,直接前驱结点指与其相邻且在其前面的结点。
- 对表中任意一个结点,直接后继结点最多只有一个,直接后继结点指与其相邻且在其后面的结点。
- 表中只有第一个结点没有直接前驱,即开始结点。
- 表中只有最后一个结点没有直接后继,即终端结点。
这些结点关系即学生成绩表的逻辑关系。
逻辑结构分为线性结构、树型结构、图形结构。
然后再谈谈数据的存储结构,上文提到数据的存储结构是数据元素及其逻辑关系在计算机存储器中的表示形式。如顺序存储、链式存储、散列存储等。
最后是数据的运算,对于上表,我们一般会进行如下操作:
- 查找某位学生的成绩
- 增加/删除一个学生信息
- 修改某个学生的成绩
- 计算平均成绩
- ...
2.2 数据结构是一个有机的整体
数据的逻辑结构、存储结构和运算是一个整体,单独去理解其中任何一个都是不全面的,因为:
- 同一个逻辑结构可以有不同的存储结构
- 同一种逻辑结构也可以有不同的数据运算集合
即任何一个发生变化都会产生一个全新的数据结构,他们是有机的整体,缺一不可。
3. 数据结构的存储方式
数据的存储结构一般包含以下4种:
- 顺序存储方式:就是数据在连续的内存区域顺序存放,一般是数组的方式。
- 链式存储方式:一般是链表的方式。
- 索引存储方式:采用附加的索引表来存储结点信息。
- 散列存储方式:根据节点的关键字直接计算出该结点的存储地址的存储方式。
4. 数据的类型
数据的类型可分为以下两类:
- 基本数据类型:其值不能再分解,如整形、浮点型等
- 聚合数据类型:如结构体、数组等。
此外,还有一种称为抽象数据类型(Abstract Data Type,ADT),指的是数据的组织及其相关的操作。
ADT 抽象数据类型名
{
数据对象:数据元素的集合
基本操作
}
抽象数据类型特征:
- 数据抽象:强调实体本质特征、能够完成的功能以及对外接口
- 数据封装:将实体外部特性和其内部实现细节分离
可以把抽象数据类型看做是描述问题的模型,它独立于具体实现,ADT把数据和操作封装起来,用户程序只能通过ADT定义的接口访问数据,从而实现信息隐藏,比如C++里的类。
5. 常用数据结构
- 数组(Array)
- 栈(Stack)
- 队列(Queue)
- 链表(Link List)
- 树(Tree)
- 图(Graph)
- 堆(Heap)
- 散列表(HASH)
参考资料
《C/C++常用算法手册》
《大话数据结构》
《数据结构与算法分析》
更多文章,欢迎关注公众号~