数据结构:数组抽象数据类型(Array ADT)
目录
什么是 ADT(Abstract Data Type)?
什么是 Array ADT?
Array ADT 提供的抽象操作(逻辑接口)
Array ADT 的抽象特征
什么是 ADT(Abstract Data Type)?
抽象数据类型(ADT)是一种对数据及其操作的逻辑建模,它描述“是什么”和“能做什么”,而不关心“怎么实现的”。
举个例子(类比):
抽象数据类型就像是“遥控器的功能说明书”:
-
你知道遥控器能干嘛:开机、换台、调音量
-
但你不需要知道里面电路怎么接的、电流怎么走的
ADT 的核心特征
特征 | 说明 |
---|---|
数据结构抽象化 | 它只关心“操作行为”,不关心“具体实现” |
操作明确 | ADT 明确规定了可以对数据执行哪些操作 |
与实现无关 | 你可以用链表、数组、树去实现它,但用户不需要知道 |
便于封装和重用 | 是面向对象思想的重要基础 |
ADT vs 数据结构 vs 数据类型
名称 | 定义 | 举例 |
---|---|---|
数据类型(Data Type) | 基本单位类型 | int, char, float |
抽象数据类型(ADT) | 描述数据行为的逻辑模型 | Stack, Queue, Map |
数据结构 | ADT 的具体实现方式 | 栈可以用数组、链表、双端数组来实现 |
什么是 Array ADT?
Array ADT(数组抽象数据类型) 是一种逻辑上的线性数据模型,它描述了“数组是什么”和“可以对它做什么”,而不是它如何被实现。
Array ADT 提供的抽象操作(逻辑接口)
操作 | 描述 |
---|---|
get(i) | 读取索引为 i 的元素 |
set(i, value) | 将第 i 个位置的值设置为 value |
length() | 返回数组的长度 |
search(value) | 查找值为 value 的位置 |
insert(i, value) | 在位置 i 插入一个值(需要移位) |
delete(i) | 删除位置 i 上的元素(需要移位) |
注意:
-
这些操作都是 抽象定义,它们只是说明:“数组要能完成这些功能”
-
具体实现可以变化(如静态数组、动态数组、稀疏数组等)
Array ADT 的抽象特征
特征 | 描述 |
---|---|
顺序存储 | 元素按固定顺序排列,每个元素有一个索引(逻辑上) |
随机访问 | 通过下标 i 可以常数时间访问任何元素 |
不可变长度 | 原始数组 ADT 通常是定长的(动态数组是扩展) |
插入/删除效率低 | 插入/删除时需要移动元素(O(n)) |