线 性 表

本文详细介绍了线性表的概念,包括它的定义、特点和实例,如字母表、学生记录和数量序列。线性表的逻辑特征强调元素间的线性关系,并举例说明。此外,文章讨论了一元多项式的运算,引出线性表在存储结构上的问题,如顺序存储和链式存储。最后,定义了线性表的抽象数据类型及其基本操作,包括初始化、销毁、插入、删除等操作。
摘要由CSDN通过智能技术生成

线性表1

一、线性表的定义和特点

线性表是具有相同特性的数据元素的一个有限序列 (a1,a2,a3,…,an)

image-20211206215137683

定义:

线性表:由n(n>=0)个数据元素(结点)a1, a2, … , an组成的有限序列。

  • 数据元素的个数n定义为表的长度
  • 当n=0时称为空表
  • 非空的线性表(n>0)记作:(a1, a2, … an)
线性表的例子

例1:分析26个英文字母组成的英文表 (A, B, C, D, … ,Z)

​ 数据元素都是字母; 元素间关系是线性关系

例2:分析学生登记表

image-20211206215235358

​ 数据元素都是一条条的学生记录; 元素间关系是线性关系

例3:某单位历年拥有计算机的数量(6, 17, 28, 50, 92, 188)

​ 数据元素都是整数; 元素间关系是线性的

线性表的逻辑特征:

同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系

第一个元素只有直接后继,最后一个元素只有一个直接前趋,其余元素有且仅有一个直接前趋和一个直接后继

二、案例引入

案例1:一元多项式的运算

一元多项式的运算:实现两个多项式加、减、乘运算

Pn(x) = p0 + p1x + p2x2 + … + pnxn

线性表 P = (p0, p1, p2, p3, … , pn) (x的指数和pi 的序号相同)

可用数组来表示

稀疏多项式 S(x) = 1 + 3x10000 + 2x20000

只存三项数据

image-20211206215317639

image-20211206215350748

顺序存储结构存在的问题:

​ 存储空间分配不灵活,分配的空间是固定大小,有时会不够,有时会浪费

​ 运算的空间复杂度高,还用了新数组C

链式存储结构

image-20211206215411655

三、线性表的类型定义

抽象数据类型定义格式:

ADT 抽象数据类型名{
	数据对象:<数据对象的定义>
	数据关系:<数据关系的定义>
	基本操作:<数据关系的定义>
}ADT 抽象数据类型名
线性表的抽象数据类型定义:
image-20211206215502248
基本操作

①InitList(&L) 线性表初始化

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

②DestroyList(&L) 销毁线性表

初始条件:线性表L已存在

操作结果:销毁线性表L

③ClearList(&L) 清空线性表

初始条件:线性表L已存在

操作结果:将L重置为空表,填0

④ListEmpty(L) 判断线性表L是否为空表

初始条件:线性表L已存在

操作结果:若L为空表(元素个数n=0),则返回true,否则返回false

⑤ListLength(L) 求线性表的长度n

初始条件:线性表L已存在

操作结果:返回线性表L中的数据元素个数

⑥GetElem(L, i, &e) 获取元素

初始条件:线性表L已存在, 且1<=i<=ListLength(L)

操作结果:用e返回线性表L中第i个数据元素的值

注意:线性表是从a1开始,不是a0

⑦LocateElem(L, e, compare()) 查找定位元素

初始条件:线性表L已存在,compare()是数据元素判定函数(相等、小于、大于…)

操作结果:返回L中第1个与e满足compare()的数据元素的位序。若这样的数据元素不存在则返回0

⑧PriorElem(L, cur_e, &pre_e) 获得当前元素cur_e的前趋

初始条件:线性表L已经存在

操作结果:若cur_e是L的数据元素,且不是第一个,则pre_e返回其其前趋,否则操作失败,pre_e无意义

⑨NextElem(L, cur_e, &next_e) 获得当前元素cur_e的后继

初始条件:线性表L已经存在

操作结果:若当前元素cur_e是L的数据元素,且不是最后一个,则用next_e返回其后继,否则操作失败,next_e无意义

⑩ListInsert(&L,i,e) 插入元素e

初始条件:线性表L已存在,且1<=i<=ListLength(L)+1(插在最后一个元素的后面)

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

⑪ListDelete(&L, i) 删除元素

初始条件:线性表L已存在且非空,且1<=i<=ListLength(L)

操作结果:删除L的第i个数据元素,L的长度减1

⑫ListTraverse(&L, visited()) (traverse:遍历)

初始条件:线性表L已存在

操作结果:依次对线性表L中的每个元素调用visited()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值