【数据结构】线性表的抽象数据类型

简介: 【数据结构】线性表的抽象数据类型

线性表抽象数据类型(LinearListAbstractDataType,简称 ADT)是一种非常重要的抽象数据类型,它是一种使用抽象的方式表示和实现一组数据元素的集合以及与之相关的一组操作的一种抽象数据类型。


它是由三个部分组成的:

  1. 一组数据元素的集合(链表,队列,栈等)
  2. 这组数据元素之间的关系(集合关系,线性关系,树形关系,网状关系)
  3. 与这组数据元素相关的操作(插入,删除,查找)

我们在上篇中拿这张图给大家类比过线性结构:

这张图就是一个数据集合,而数据元素就是一个一个小朋友,很明显他们之间的关系是线性的.


那么这些数据元素之间又会有什么操作呢?


你看上面这张图,一看就是没经验的老师排的队,有的小朋友高,有的矮,队伍一点也不好看.所以我们让小朋友解散重新排——这是一个线性表重置为空表的操作.


排好了队,我们想知道某个小朋友在不在队里,在队里的哪个位置?那就要用到查找某个元素位置的操作.


有时候还会有家长问老师,现在班里有几个同学啊?这就要用到求线性表的长度的操作.


当然还会有小朋友转入和转出的操作,这就要用到数据元素的插入和删除操作.


综上,线性表的抽象数据类型定义如下:

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中即可.


可见,对于复杂的个性化操作,其实就是把基本操作组合起来实现的.


结语

当我们搞清楚线性表的抽象数据类型后,在数据结构线性表篇我们还将一起学习线性表的顺序存储结构(顺序表的实现),线性表的链式存储结构(链表的实现)等相关知识.希望这些内容能对大家有所帮助,一起学习,一起进步!



数据结构线性表篇思维导图:


相关文章
|
存储 算法 测试技术
【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】
本任务要求编写程序求两个集合的并集、交集和差集。主要内容包括: 1. **单链表表示集合**:使用单链表存储集合元素,确保元素唯一且无序。 2. **求并集**:遍历两个集合,将所有不同元素加入新链表。 3. **求交集**:遍历集合A,检查元素是否在集合B中存在,若存在则加入结果链表。 4. **求差集**:遍历集合A,检查元素是否不在集合B中,若满足条件则加入结果链表。 通过C++代码实现上述操作,并提供测试用例验证结果。测试输入为两个集合的元素,输出为有序集合A、B,以及它们的并集、交集和差集。 示例测试输入: ``` a c e f a b d e h i ``` 预期输出:
657 7
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
826 5
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
本文档介绍了线性表的基本运算任务,涵盖顺序表和链表的初始化、销毁、判定是否为空、求长度、输出、查找元素、插入和删除元素等内容。通过C++代码示例详细展示了每一步骤的具体实现方法,并提供了测试说明和通关代码。 主要内容包括: - **任务描述**:实现顺序表的基本运算。 - **相关知识**:介绍线性表的基本概念及操作,如初始化、销毁、判定是否为空表等。 - **具体操作**:详述顺序表和链表的初始化、求长度、输出、查找、插入和删除元素的方法,并附有代码示例。 - **测试说明**:提供测试输入和预期输出,确保代码正确性。 - **通关代码**:给出完整的C++代码实现,帮助完成任务。 文档
655 5
|
存储 Java
数据结构第二篇【关于java线性表(顺序表)的基本操作】
数据结构第二篇【关于java线性表(顺序表)的基本操作】
340 6
|
存储 JavaScript 前端开发
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
650 1
|
存储
【数据结构】线性表和顺序表
【数据结构】线性表和顺序表
331 1
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
存储 测试技术
【数据结构】操作受限的线性表,队列的具体实现
【数据结构】操作受限的线性表,队列的具体实现
245 4
01(数据结构考研)线性表相关操作代码
01(数据结构考研)线性表相关操作代码
349 0
|
存储 C语言
数据结构之线性表的初始化及其操作
数据结构之线性表的初始化及其操作
434 0

热门文章

最新文章