本文是个人笔记,仅用于学习分享,素材来自青岛大学王卓老师的教学视频,如有侵权,请留言作删文处理。
📚 Week02_03_线性表的类型定义
线性表的抽象数据类型的定义如下:
ADT List
{
数据对象:D = {ai| ai属于Elemset, (i=1, 2, ..., n, n≥0)}
数据关系:R = {<ai-1,ai>| ai-1,ai属于D,(i=1, 2, ..., n)}
基本操作:
InitList(&L);
DestroyList(&L);
ListInsert(&L, i, e);
ListDelete(&L, i, &e);
...
}ADT List
基本操作一
InitList(&L);
// Initialization List
操作结果:构造一个空的线性表 L
DestroyList(&L);
初始条件:线性表 L 已经存在
操作结果:销毁线性表 L
ClearList(&L);
初始条件:线性表 L 已经存在
操作结果:将线性表 L 重置为空表
基本操作二
ListEmpty(L);
初始条件:线性表 L 已经存在
操作结果:若线性表 L 是空表,则返回 True;若线性表不是空表,则返回 False
ListLength(L);
初始条件:线性表 L 已经存在
操作结果:返回线性表 L 中的数据元素个数
基本操作三
GetElem(L, i, &e);
初始条件:线性表 L 已经存在,1 ≤ i ≤ ListLength(L)
操作结果:用 e 返回线性表 L 中第 i 个数据元素的值。
LocateElem(L, e, compare());
初始条件:线性表 L 已经存在,compare() 是数据元素判定函数(等于,大于或小于元素 e)
操作结果:返回 L 中第 1 个与 e 满足compare() 的数据元素的位序。若这样的数据元素不存在,则返回值为 0
基本操作四
PriorElem(L, cur_e, &pre_e);
初始条件:线性表 L 已经存在
操作结果:若 cur_e 是 L 的数据元素,且不是第一个数据元素,则用 pre_e 返回它的前驱;若cur_e 没有前驱元素,则操作失败,pre_e 无意义。
NextElem(L, cur_e, &next_e);
初始条件:线性表 L 已经存在
操作结果:若 cur_e 是 L 的数据元素,且不是最后一个数据元素,则用 next_e 返回它的后继;若cur_e 没有后继元素,则操作失败,next_e 无意义。
基本操作五
ListInsert(&L, i, e);
初始条件:线性表 L 已经存在,1 ≤ i ≤ ListLength(L) + 1(合法插入位置的范围)
操作结果:在 L 的第 i 个位置之前插入新的数据元素 e,L 的长度 + 1
插入元素 e 之前(长度为 n)
插入元素 e 之后(长度为 n + 1)
基本操作六
ListDelete(&L, i, &e);
初始条件:线性表 L 已经存在,1 ≤ i ≤ ListLength(L)(合法删除位置的范围)
操作结果:删除 L 的第 i 个,并用 e 返回其值,L 的长度 - 1
删除之前(长度为 n)
删除后(长度为 n - 1)
ListTraverse(&L, visited());
初始条件:线性表 L 已经存在
操作结果:依次对线性表中每个元素调用 visited()
以上所提及的运算是逻辑结构上定义的运算。只要给出这些运算的功能是 " 做什么 ",至于 " 如何做 " 等实现细节,只有待确定了存储结构之后才考虑。
学习笔记最后有微信公众号:惟CPP,欢迎关注,一起交流学习进步~