线性表

线性表的概念及其抽象数据类型定义

线性表的逻辑结构

线性表(Linear List)描述:线性表是n个类型相同数据元素的有限序列,对n>0,除第一元素无直接前驱、最后一个元素无直接后继外,其余的每个数据元素只有一个直接前驱和一个直接后继,数据元素之间具有一对一的关系。

例如,英文字母表(A,B,……,Z)就是一个简单的线性表,表中的每一个英文字母就是一个数据元素,每个元素之间存在唯一的顺序关系,在英文字母表字母B的前面是字母A,而字母B后面是字母C,以此类推。在一般的线性表中,一个数据元素(Data Elements)可由若干数据项组成,例如学籍表中,每个学生的相关信息由学号、姓名、性别、籍贯等数据项组成,表中的每一行称为一个记录(或数据元素),含有大量类型相同记录的线性表称为文件(或称数据对象)。

综上所述,线性表是由n(n>=0)个类型相同的数据元素组成的有限序列,记作(a1,a2,……,ai-1,ai,ai+1,……an).

这里的数据元素ai(1<=i<=n)在不同情况下含义可以不同,它既可以是原子类型,也可以是结构类型,但一个线性表中的数据元素必须属于同一数据对象。此外,线性表中相邻数据元素之间存在着序偶关系,即对于非空的线性表,表中ai-1领先于ai,称ai-1是ai的直接前驱,而称ai是ai-1的直接后继。除了第一个元素a1外,每个元素ai有且仅有一个被称为其直接前驱的结点ai-1,除了最后一个元素an外,每个元素ai有且仅有一个被称为其直接后继的结点ai+1.线性表中元素的个数n被定义为线性表的长度,n=0时称为空表。

线性表的特点:

①同一性。线性表由同类数据元素组成,每一个ai必须属于同一数据类型。

②有穷性。线性表由有限个数据元素组成,表长度就是表中数据元素的个数。

③有序性。线性表中相邻数据元素之间存在着序偶关系<ai,ai+1>。

由此可看出,线性表即是一种最简单的数据结构(因为数据元素之间是由前驱、后继直观、有序的关系确定的),又是一种最常见的数据结构(因为矩阵、数组、字符串、堆栈、队列等都符合线性条件)。

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

下面给出线性表的抽象数据类型定义。

ADT LinearList{

数据元素:D={ai|ai∈D0,i=1,2,……,n,n>=0,D0为某一数据类型}

结构关系:R={<ai,ai+1>|ai,ai+1∈D0,i=1,2,……,n-1}

基本操作:

①InitList(L)

操作前提:L为未初始化线性表。

操作结果:将L初始化为空表。

②ListLength(L)

操作前提:线性表L已存在。

操作结果:如果L为空表则返回0,否则返回表中的元素个数。

③GetData(L,i)

操作前提:表L存在,且1<=i<=ListLength(L)。

操作结果:返回线性表L中第i个法元素的值。

④InsList(L,i,e)

操作前提:表L已存在,e为合法元素值且1<=i<=ListLength(L)+1.

操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1。

⑤DelList(L,i,e)

操作前提:表L已存在且非空,1<=i<=ListLength(L)。

操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1.

⑥Locate(L,e)

操作前提:表L已存在,e为合法数据元素值。

操作结果:如果L中存在数据元素e,则将当前指针指向数据元素e所在位置并返回TURE,否则返回FALSE。

⑦DestroyList(L)

操作前提:线性表L已存在。

操作结果:将L销毁。

⑧ClearList(L)

操作前提:线性表L已存在。

操作结果:将L置为空表。

⑨EmptyList(L)

操作前提:线性表L已存在。

操作结果:如果L为空表则返回TURE,否则返回FALSE。

}ADT LinearList;

因为一个抽象数据类型仅是一个模型的定义,并不涉及模型的具体实现,因此这里使用的参数不考虑具体类型。在实际应用中,数据元素可能属多种类型,可根据具体需要选择使用不同的数据类型。

线性表的抽象数据类型定义中给出的各种操作是定义在线性表的逻辑结构上的,用户只需了解各种操作的功能,而无须知道它们的具体实现。各种操作的具体实现与线性表具体采用哪种存储结构有关。

在实际问题中对线性表的运算可能很多,例如有时需要将多个线性表合并成一个线性表,以此在此问题基础之上进行的有条件合并等。像合并、分析、复制、排序等复合运算问题都可以利用基本运算的组合来实现。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值