定义
程序设计 = 数据结构 + 算法
数据类型
是一组性质相同的值的集合及定义在此集合上的一些操作的总称。
抽象
指抽取出事物具有的普遍性的本质,抽取问题的特征而忽略非本质的问题,是对具体事物的一个概括。 抽象:指抽取出事物具有的普遍性的本质,抽取问题的特征而忽略非本质的问题,是对具体事物的一个概括。
抽象的示例:
>现实场景:管理多种交通工具(如汽车、自行车、摩托车),它们都具有“启动”和“停止”的功能。
// 定义一个抽象的交通工具结构体
typedef struct {
void (*start)();
void (*stop)();
} Vehicle;
// 汽车的具体实现
void car_start() { printf("汽车启动\n"); }
void car_stop() { printf("汽车停止\n"); }
// 自行车的具体实现
void bike_start() { printf("自行车启动\n"); }
void bike_stop() { printf("自行车停止\n"); }
int main() {
Vehicle car = {car_start, car_stop};
Vehicle bike = {bike_start, bike_stop};
car.start();
bike.start();
car.stop();
bike.stop();
return 0;
}
>说明:
这里的 `Vehicle` 结构体就是对“交通工具”这一现实概念的抽象,只关注所有交通工具共有的“启动”和“停止”操作,而不关心具体实现细节。
抽象数据类型
指一个数学模型及定义在该模型上的一组操作。把现实中的问题分解为多个小问题,建立计算机能处理的数据模型。
数学模型:
线性表是n个数据元素的有限序列。
定义的操作:
- InitList(*L):初始化线性表L
- ListEmpty(L):判断线性表是否为空
- ListLength(L):返回线性表长度
- GetElem(L, i, *e):取第i个元素
- ListInsert(L, i, e):在第i个位置插入元素e
- ListDelete(L, i, *e):删除第i个元素并用e返回
- LocateElem(L, e):查找元素e的位置
说明:
抽象数据类型只关心数据结构和操作,不关心具体实现(如用数组还是链表实现)。
数据结构:
相互之间存在一种或多种特定关系的数据元素的集合。
逻辑结构
数据对象中数据元素之间的相互关系。
-
集合结构
-
线性结构
-
树形结构
-
图形结构。
物理结构:
是指数据的逻辑结构在计算机中的存储形式。
-
顺序存储结构。
-
链式存储结构。