在我们生活中,经常会面对这样的问题:
“我要怎么整理我的衣柜?”
“电脑里照片太多了,怎么归类才方便查找?”
其实,程序员也有类似的烦恼。他们不整理衣柜,而是“整理数据”。而这门关于如何“收纳”和“使用”数据的学问,就叫做数据结构。
一、数据结构的基本概念
1、数据
数据是信息的载体,是数字、字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。
2、数据元素
数据元素是数据的基本单位。
一个数据元素有若干个数据项组成(数据项是构成数据元素的最小单位)。
如下表所示,学生记录就是一个数据元素,姓名、生日、年龄均为数据项,构成了一条学生记录。
数据元素 | |||||
学生记录 | 一个人 | 另一个人 | |||
数据项 | 姓名 | ||||
数据项 | 生日 | 年 | 数据项 | 组合项 | |
月 | 数据项 | ||||
日 | 数据项 | ||||
数据项 | 年龄 |
3、数据对象与数据结构
数据对象——具有相同性质的数据元素的集合
例如:全国所有门店的排队顾客信息
数据结构——一种或多种特定关系的数据源的集合
例如:某个特定门店的排队顾客信息和他们之间的联系
4号、5号、6号都是A门店排队顾客,4号在5号之前,5号在6号之前,他们具有特定关系,组成一个数据结构
5号、2号他们之间具有相同性质,同一个数据对象里的元素————
4号——>|5号|——>6号 A门店排队顾客信息| || |
1号——>|2号|——>3号 B门店排队顾客信息————
4、数据类型
原子类型(int、bool等)
结构类型(其值可以分解成若干成分)
Struct Customer{int num;int people;...
};
抽象数据类型(用数学化的语言定义数据的逻辑结构、定义运算。只有当要用计算机去是实现这种结构的时候才考虑哪种存储结构。
二、数据结构三要素
数据的逻辑结构独立于存储结构,数据的存储结构依赖于逻辑结构。
例如,有序表—>顺序表/链表
1. 数据的逻辑结构
这指的是数据之间的关系。
常见的逻辑结构有:
- 集合:结构中的元素同2属于一个集合外,别无其它关系,例如:{1,7,9}。
- 线性结构:像排队买奶茶,前后有顺序。例如:数组、链表。
- 树形结构:像家谱,有祖先和后代。例如:二叉树、家族树。
- 图形结构:像城市地铁图,站点之间可以相互连接。例如:社交网络图。
2. 数据的存储结构
在存储数据时,通常不仅要存储各数据元素的值,而且要存储数据之间的关系。
这个讲的是数据如何放进计算机的内存里,关系到程序运行的效率。
常见的存储方式有:
顺序存储(像数组)
就像地铁列车车厢,每节车厢相连,不好插队。链式存储(像链表)
像一串钥匙环,你可以随意添加或拆掉中间的钥匙。索引存储
散列存储
3. 数据的运算
施加在数据上的运算包括运算的定义和实现。
运算的定义是针对逻辑结构的,运算的实现是针对存储结构的。
运算的实现,这是说我们能对这种结构的数据做哪些事,比如:
插入(加一个新的数据)
删除(拿掉某个数据)
查找(找到你要的那条信息)
排序(按大小、字母、时间排序)