线性表抽象数据类型(LinearListAbstractDataType,简称 ADT)是一种非常重要的抽象数据类型,它是一种使用抽象的方式表示和实现一组数据元素的集合以及与之相关的一组操作的一种抽象数据类型。
它是由三个部分组成的:
- 一组数据元素的集合(链表,队列,栈等)
- 这组数据元素之间的关系(集合关系,线性关系,树形关系,网状关系)
- 与这组数据元素相关的操作(插入,删除,查找)
我们在上篇中拿这张图给大家类比过线性结构:
这张图就是一个数据集合,而数据元素就是一个一个小朋友,很明显他们之间的关系是线性的.
那么这些数据元素之间又会有什么操作呢?
你看上面这张图,一看就是没经验的老师排的队,有的小朋友高,有的矮,队伍一点也不好看.所以我们让小朋友解散重新排——这是一个线性表重置为空表的操作.
排好了队,我们想知道某个小朋友在不在队里,在队里的哪个位置?那就要用到查找某个元素位置的操作.
有时候还会有家长问老师,现在班里有几个同学啊?这就要用到求线性表的长度的操作.
当然还会有小朋友转入和转出的操作,这就要用到数据元素的插入和删除操作.
综上,线性表的抽象数据类型定义如下:
ADT 线性表(List) Data 线性表的数据对象集合为 {a1, a2, ..., an},每个元素的类型均为DataType. 其中, 除第一个元素a1外, 每一个元素有且只有一个直接前驱元素. 除了最后一个元素an外, 每一个元素有且只有一个直接后继元素. 数据元素之间的关系是一对一的关系. Operation InitList(*L); 初始化操作, 建立一个空的线性表L. ListEmpty(L); 若线性表为空,返回true,否则返回false. ClearList(*L); 将线性表清空. GetElem(L, i, *e); 将线性表L中的第i个位置元素值返回给e. LocateElem(L, e); 在线性表L中查找与给定值e相等的元素. 如果查找成功, 返回该元素在表中序号表示成功; 否则,返回0表示失败. ListInsert(*L, i, e); 在线性表L中的第i个位置插入新元素e. ListDelete(*L, i, e); 删除线性表L中第i个位置元素,并用e返回其值. ListLength(L); 返回线性表L的元素个数. endADT
当然,对于不同的应用,线性表的基本操作是不同的,上面这些只是最基本的,对于实际问题中涉及的关于线性表的更复杂操作,完全可以用这些基本操作的组合来实现.
比如,要实现两个线性表集合A和B的并集操作.即要使得集合A=AUB.其实就是把存在于集合B中但并不存在于A中的数据元素插入到A中即可.
再带入到上面的基本操作中,其实就是先循环B中的每个元素,判断是否属于A,如果不存在,则插入到A中即可.
可见,对于复杂的个性化操作,其实就是把基本操作组合起来实现的.
结语
当我们搞清楚线性表的抽象数据类型后,在数据结构线性表篇我们还将一起学习线性表的顺序存储结构(顺序表的实现),线性表的链式存储结构(链表的实现)等相关知识.希望这些内容能对大家有所帮助,一起学习,一起进步!
数据结构线性表篇思维导图: