文章导读
1、线性表的逻辑结构
一个线性表是n个数据元素的有限序列(a1,a2,…,an)。元素之间是相邻关系,即第i-1个元素领先于第i个元素,第i个元素领先于第i+1个元素。可以将第i-1个元素称为第i个元素的直接前驱元素,第i+1个元素称为第i个元素的直接后继元素。表中元素的个数为表的长度,长度为0的表称为空表。
线性表中所存储元素的具体含义,在不同的情况下可以不同,它可以是一个数,也可以是字符串,甚至是更复杂的信息。
例如,所有的省会城市
{济南,成都,西安,……,昆明}
是一个线性表,表中的数据元素是字符串。又如,某中学班级学生的身高可以用线性表的形式给出
{1.61,1.59,1.53,……,1.69}
表中的数据元素是小数。
线性表也可以存储比较复杂的数据元素,一个数据元素可以由若干个数据项组成,在这种情况下,数据元素被称为记录。
例如,一个计算机培训学校的一门课程情况就是一个记录。记录由编号、名称、类别、老师编号、课程简介五个数据项组成。
图1某计算机培训学校的课程表从上面的三个例子可以看出,含有n个数据元素的线性表是一个数据结构,线性表中的数据元素可以是各种各样的,但同一线性表中元素必定具有相同的特性,属于同一数据对象。
2、线性表的运算
线性表的运算是指线性表的访问、插入、删除等运算操作。另外,线性表的长度也是不固定的,随着数据元素个数的变化而变化。
对线性表进行的基本运算有如下几种:
(1)访问第i个数据元素
该运算从线性表中得到第i个数据元素GET(L,i),i需要满足大于等于1并且小于等于线性表长度的条件,i被称为线性表的序号。
(2)求线性表的长度
该运算求得线性表的长度LENGTH(L),LENGTH(L)计算线性表的长度并返回长度值。
(3)访问第i+1个数据元素
该运算从线性表中取得第i个元素的直接后继元素NEXT(L,i+1),前提条件是i要小于线性表的长度减1的值,以防止访问溢出。即i+1超出线性表的长度时,NEXT(L,i+1)不存在。
(4)访问第i-1个数据元素
该运算从线性表中取得第i个元素的直接前驱元素NEXT(L,i-1),前提条件是i要大于1,以防止访问溢出。即i-1为零或负值时,NEXT(L,i-1)不存在。
(5)置空线性表
该运算将线性表设置为空表SETNULL(L),即不包含任何数据元素。线性表中原有的数据元素将被清空。
(6)按特定的值查找线性表
该运算从线性表中查询与a符合的数据元素FIND(L,a),a或者与线性表中数据元素同类型,或者与数据元素的一个子项类型相同。若线性表存在符合a的数据元素,返回该数据元素的序号。
(7)在第i个元素和第i-1个元素之间插入一个元素
该运算在长度为n的线性表中插入a数据元素INSERT(L,i,a)。插入前线性表的长度为n,插入后线性表的长度为n+1。
(8)删除第i个元素
该运算从长度为n的线性表中删除第i个元素,i需要满足大于等于1并且小于等于n的条件。
上面介绍的是线性表的基本运算,通过基本运算可以构建一些更复杂的运算。如:两个线性表的合并运算;线性表内数据元素的排序运算;线性表的拆分运算;线性表的复制运算等等。
算法示例1
假设有A和B两个线性表,长度均为n,要求合并A和B两个线性表,即A=AUB。具体算法是扩大A表的长度,将B表中不在A表中出现的数据元素插入到A表中。只要依次取得B表中的每个数据元素,并按照其值查找A表,若在A表中不存在,就将该数据元素插入到A表。
上述运算可以用下面的算法描述。
线性表合并算法描述文章小结
线性表是一个具有n个数据元素且有序的数据结构,数据元素按照序号有序排列,第i个数据元素的直接前驱是第i-1个元素(i1),直接后继元素是第i+1个元素(in)。线性表的基本运算包括插入、访问、删除、查找、置空、求长度六类基本运算,应用基本运算可以构建更复杂的运算。例如,线性表的合并、排序、拆分等复杂运算。