数据结构与算法(C语言版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2 线性表的逻辑结构

3.2.1 线性表的定义

线性表(linearlist)简称表,是nn≥0)个具有相同类型的数据元素的有限序列。线性表中数据元素的个数称为线性表的长度。长度等于零的线性表称为空表。一个非空表通常记为:L=(a1a2,…,an),其中,ai(1≤in)称为数据元素,下角标i表示该元素在线性表中的位置或序号,称元素ai位于表的第i个位置,或称ai是表中的第i个元素。a1称为第一个元素,an称为最后一个元素,任意一对相邻的数据元素 ai-1ai(1<in)之间存在序偶关系<ai-1ai>,且ai-1称为ai的前驱,ai称为ai-1的后继。在这个序列中,元素a1无前驱,元素an无后继,其他每个元素有且仅有一个前驱和一个后继。

图3-4 线性表的逻辑结构图

线性表的数据元素具有抽象(即不确定)的数据类型,在实际问题中,数据元素的抽象类型将被具体的数据类型所取代。例如,约瑟夫环问题中n个人的编号(1,2,…,n)是一个线性表,表中数据元素的类型是整型;学籍管理问题中n个人的学籍信息(a1a2,…,an)是一个线性表,表中数据元素的类型是相应的结构体类型。

3.2.2 线性表的抽象数据类型定义

线性表是一个相当灵活的数据结构,对线性表的数据元素不仅可以进行存取访问,还可以进行插入和删除等基本操作。其抽象数据类型定义为:

            ADTList
              Data
                  线性表中的数据元素具有相同类型,相邻元素具有前驱和后继关系
              Operation
                  InitList
                      前置条件:线性表不存在
                      输入:无
                      功能:线性表的初始化
                      输出:无
                      后置条件:一个空的线性表
                  Creat
                      前置条件:线性表不存在
                      输入:n个数据元素
                      功能:建立一个具有n个元素的线性表
                      输出:无
                      后置条件:一个具有n个元素的线性表
                  Length
                      前置条件:线性表已存在
                      输入:无
                      功能:求线性表的长度
                      输出:线性表中数据元素的个数
                      后置条件:线性表不变
                  Get
                      前置条件:线性表已存在
                      输入:元素的序号i
                      功能:按位查找,在线性表中查找序号为i的数据元素
                      输出:如果序号合法,返回序号为i的元素值,否则抛出异常
                      后置条件:线性表不变
                  Locate
                      前置条件:线性表已存在
                      输入:数据元素x
                      功能:按值查找,在线性表中查找值等于x的元素
                      输出:如果查找成功,返回元素x在表中的序号,否则返回0
                      后置条件:线性表不变
                  Insert
                      前置条件:线性表已存在
                      输入:插入位置i;待插元素x
                      功能:插入操作,在线性表的第i个位置处插入一个新元素x
                      输出:若插入不成功,抛出异常
                      后置条件:若插入成功,表中增加了一个新元素
                  Delete
                      前置条件:线性表已存在
                      输入:删除位置i
                      功能:删除操作,删除线性表中的第i个元素
                      输出:若删除成功,返回被删元素,否则抛出异常
                      后置条件:若删除成功,表中减少了一个元素
                  Empty
                      前置条件:线性表已存在
                      输入:无
                      功能:判空操作,判断线性表是否为空表
                      输出:若是空表,返回1,否则返回0
                      后置条件:线性表不变
                  PrintList
                      前置条件:线性表已存在
                      输入:无
                      功能:遍历操作,按序号依次输出线性表中的元素
                      输出:线性表的各个数据元素
                      后置条件:线性表不变
            endADT

需要强调的是:(1)对于不同的应用,线性表的基本操作不同;(2)上述操作是基本操作,对于实际问题中更复杂的操作,可以用这些基本操作的组合(即调用基本操作)来实现;(3)对于不同的应用,上述操作的接口可能不同,例如删除操作,若要求删除表中值为x的元素,则Delete操作的输入参数就不能是位置而应该是元素值。