1.线性表的定义

这里特别说明,ai+1或a(i+1)是一个意思,这里的i+1都是a的下标

线性表(List):由零分或多个数据元素组成的有限序列

强调关键地方:

  • 首先它是一个序列,也就是说元素之间有个先来后到的关系,有顺序的。
  • 若元素存在多个,则单元格元素无前驱,而最后一个元素无后继(有限序列),其他元素有且只有一个前驱和后继。
  • 另外,线性表强调是有限的,事实上无论计算机发展多么强大,它所处理的元素都是有限的。

2.数学语言来进行定义

其中ai-1的前驱是ai-2,后继是ai

  • 所有线性表元素的个数n( n >= 0 )定义线性表的长度,当n=0时,称为空表。
  • 同一线性表中的元素必定具有相同特性,数据元素间等关系是线性关系。

1.线性表的抽象数据类型定义:

抽象数据类型定义

定义:是指一个数学模型以及定义在此模型上的一组操作。

结构描述

ADT list{
数据对象:D={ai|ai属于Elemset,(i=1,2,3,……n,n>=0)
数据关系:R={<a(i-1),ai>|a(i-1),ai属于D,(i=1,2,3,……n)}
基本操作
InitList(*L);
ListInsert(*L,i,e);
DestroyList(*L);
ListDelete(L,i,e);
……等等
}ADT List

实现方式

Initlist(*L)

操作结果:构造一个空的线性表

DestroyList(*L)
初始条件:线性表L已经存在
操作结果:销毁线性表L

ClearList(*L)
初始条件:线性表L已经存在
操作结果:将L表重置为空表
与销毁表不同的是,重置L之后其本身位置还在,而删除就是连本身也删除了

ListEmpty(L)
初始条件:线性表L已经存在。
操作结果:若线性表L为空表(n=0无元素),则返回true,否则返回false

ListLength(L)
初始条件:线性表L已经存在
操作结果:返回线性表L中的数据元素的个数,计算L表长度

GetElem(L,i,*e)
初始条件:线性表L已经存在,1 <= i <= ListLength(L) 大于第1个元素,小于最后一个元素
操作结果:用e返回线性表L中第i个数据元素的值

LocateElem(L,e,compare())
初始条件:线性表L已经存在,compare()是数据元素判断函数(判定=、>、<、元素e的元素,与e进行比较)。
操作结果:返回L中第1个与e满足compare()的数据元素的位序。若这样的数据元素不存在则返回值0

PriorElem(L,cur_e,*pre_e)
初始条件:线性表L已经存在
操作结果:若cur_e是L的数据元素,且不是第一个(第一个元素无前驱),则用pre_e返回它的前驱,否则操作失败;pre_e无意义

NextElem(L,cur_e,*next_e)
初始条件:线性表L已经存在
操作结果:若cur_e是L的数据元素,且不是最后一个(最后一个元素无后继),则用next_e返回它的后继,否则操作失败,next_无意义

ListInsert(*L,i,e)
初始条件:线性表L已经存在,1<=i<=ListLength(L)+1 可以插入在第1个元素的位置,或者最后一个元素之后的位置
操作结果:在L的第i个位置之前插入新的数据元素e,L的长度会加1

ListDelete(*L,i,*e)
初始条件:线性表L已经存在,1<=i<=ListLength(L)
操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减一。
删除前(长度为n)
(a1,a2,……,a(i-1),ai,a(i+1),……,an)
删除后(长度为n-1)
(a1,a2……,a(i-1),a(i+1),……,an)
此时a(i-1)的后继就变成a(i+1)

ListTraverse(*L,visited()) 对每个元素遍历一般
初始条件:线性表L已经存在
操作结果:一次对线性表中的每个元素调用visited()

最后修改:2022 年 03 月 11 日
如果觉得我的文章对你有用,请随意赞赏