数据结构的抽象数据类型描述
- 数组: 有序的元素序列,将有限个元素按顺序排列的集合。
- 链表:有序的元素序列,但不同于数组,链表在内存中不是连续存放的,通过指针指向下一个元素。
- 栈:一种操作受限制的线性表,其限制是仅能在一端进行插入和删除。新添加的元素会被保存到栈顶,称为入栈,删除的时候移除栈顶的第一个元素,称为出栈。后进先出。
- 队列: 一种操作受限制的线性表,其限制是仅能在前端进行删除,后端进行插入。先进先出。
- 二分搜索树: 一种具有层次结构的有限集合。每个结点都有左右结点,比结点大的在结点右边,比结点小的在结点左边。这样的特点使得查找效率很高效。
- 集合:由一堆无序的、 不重复的元素组成的集合。
- 映射:通过<键,值>方式存储数据,每个元素都有<键,值>,通过键访问元素。
- 堆:特殊的树形结构。最大值在根,每个父节点都比子节点大,称为最大堆;根是最小值,每个父节点都比子节点小,称为最小堆。
- 优先队列:一种特殊的队列,其特殊之处是根据优先级出队,而不是先进先出。
- 前缀树:n叉树结构,通过字符寻找下一个节点。
- 并查集:集合与集合之间的运算。比如两个元素是否同一个集合;合并集合;
- 哈希表:类似映射。不同之处是:将key通过哈希函数转成数字索引,再去访问数组的元素。
- 图:由n(n ≥ 0)个结点 组成的集合。每个结点都可以指向其他结点。
数组
类型名称: 数组 。
数据对象集: n(n ≥ 0)个元素构成的有序序列 。
操作集: 整数i
表示位置,ElementType
为元素类型。
- 查找元素:
int find( ElementType e)
- 插入元素:
void insert(int i, ElementType e)
- 删除元素:
ElementType remove(int i)
- 更新元素:
void set(int i, ElementType e)
- 访问元素:
ElementType get(int i)
- 返回长度:
int length()
链表
类型名称: 链表。
数据对象集: n(n ≥ 0)个结点构成的有限集合,每个结点带有指向下一个元素的指针
操作集: 整数 i
表示位置,ElementType
为元素类型。
- 添加元素:
void insert(int i, ElementType e)
- 删除元素:
ElementType remove(int i)
- 查找元素:
int find(ElementType e)
- 更新元素:
void set(int i, ElementType e)
- 访问元素:
ElementType get(int i)
- 链表元素数量:
int length()
栈
类型名称: 栈。
数据对象集: n(n ≥ 0)个构成的有序序列元素。
操作集: ElementType
为元素类型。
- 入栈:
void push(ElementType e)
- 出栈:
ElementType pop()
- 栈顶元素:
ElementType peek()
- 元素数量:
int length()
队列
类型名称: 队列。
数据对象集: n(n ≥ 0)个构成的有序序列元素。
操作集: ElementType
为元素类型。
- 进队:
enqueue(ElementType e)
- 出队:
ElementType dequeue()
- 队首:
ElementType front()
- 是否空:
boolean isEmpty()
- 元素数量:
int length()
集合
类型名称: 集合。
数据对象集: n(n ≥ 0)个元素构成的有限集合。
操作集: ElementType
为元素类型。
- 添加:
void add(ElementType e)
- 删除:
ElementType remove(ElementType e)
- 是否包含某个元素:
boolean contains(ElementType e)
- 是否为空:
boolean isEmpty()
- 长度:
int length()
映射
类型名称: 映射。
数据对象集: 每个元素都有<键,值>,通过键访问元素
操作集: KeyType
为键类型,ValueType
为值类型。
- 添加:
void add(KeyTpe key, ValueType value)
- 访问:
ValueType get(KeyType key)
- 修改:
void set(KeyTpe key, ValueType value)
- 删除:
ValueType remove(KeyType key)
- 元素数量:
int length()
二分搜索树
类型名称: 二分搜索树。
数据对象集: n(n ≥ 0)个结点构成的有限集合,每个结点都有左右指针指向它的子节点
操作集: ElementType
为元素类型。
- 插入:
void insert(ElementType e)
- 删除:
remove(ElementType e)
- 查找:
ElementType find(ElementType e)
- 前序遍历:
void preOrder()
- 中序遍历:
void preOrder()
- 后序遍历:
void preOrder()
- 层序遍历:
void levelOrder()
- 结点数量:
int size()
前缀树
类型名称: 前缀树。
数据对象集: 每个节点都有一个指针指向下一个,通过字符寻找下一个节点。
操作集: 默认为处理字母字符。
- 添加单词:
void add(String word)
- 查询是否有某个单词:
boolean contains(String word)
- 是否包含某个前缀:
boolean isPrefix(String prefix)
- 单词数量:
int size()
堆
类型名称: 最大堆。
数据对象集: n(n ≥ 0)个结点构成的有限集合,通过索引关系访问父节点以及左右结点
操作集: ElementType
为元素类型。
- 添加:
void add(ElementType e)
- 删除堆顶元素:
ElementType remove(ElementType e)
- 获取堆顶元素:
ElementType get()
- 元素数量:
int lenght()
优先队列
类型名称: 优先队列。
数据对象集: n(n ≥ 0)个构成的有序序列元素
操作集: ElementType
为元素类型。
- 进队:
enqueue(ElementType e)
- 出队:
ElementType dequeue()
- 队首:
ElementType front()
- 是否空:
boolean isEmpty()
- 元素数量:
int length()
并查集
类型名称: 并查集。
数据对象集: 元素 或 集合。
操作集: ElementType
为元素类型 。
- 是否同一个集合:
boolean isConnected(ElementType p, ElementType q)
- 合并集合:
void unionElement(ElementType p, ElementType q)
哈希表
类型名称: 哈希表。
数据对象集: 有<键,值>的元素。
操作集: KeyType
为键类型,ValueType
为值类型。
- 添加:
void add(KeyTpe key, ValueType value)
- 访问:
ValueType get(KeyType key)
- 修改:
void set(KeyTpe key, ValueType value)
- 删除:
ValueType remove(KeyType key)
- 哈希函数:
int hashCode(key)
- 元素数量:
int size()
图
类型名称: 图。
数据对象集: 结点。每个节点都可以指向其他结点。
操作集: ElementType
为元素类型 。
- 是否包含某个点:
boolean contains(ElementType v)
- v1点到v2点是否连通:
boolean isConnected(ElementType v1, ElementEtype v1)
- 添加点:
void addVertex(ElementType v)
- 添加线:
void addEdge(ElmentType v1, ElmentType v2)
- 删除点:
ElementType removeVertex(v)
- 删除线:
void removeEdge(ElementType v1, ElementType v2)
- 获取点的线:
Array getEdge(v)