目 录CONTENT

文章目录

🚀线性表的类型定义

柯基
2024-12-11 / 0 评论 / 0 点赞 / 24 阅读 / 995 字

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

datastructure6_1

🎃基本操作

🎍初始化

InitList(&L) (intialization List)

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

🎎销毁线性表

DestoryList(&L)

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

操作结果:销毁线性表L

🥼线性表置空/清空线性表

ClearList(&L)

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

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

🖼判断线性表是否为空

ListEmpty(L)

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

操作结果:若线性表L为空表,则返回true;否则返回false

✨判断元素个数(表长)

ListLength(L)

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

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

🎐线性表的按值查找

GetElem(L,i,&e)

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

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

LocateElem(L,e,Compare())

初始条件:线性表L已经存在,compare()是数据元素判定函数。

操作结果:返回L中第一个与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_e无意义。

🥽插入元素

ListInsert(&L, i, e)

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

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

datastructure6_2

🎑删除某个元素

ListDelete(&L,i,&e)

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

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

datastructure6_3

🛒对线性表每个元素做操作

ListTraverse(&L, visited())

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

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

🥓插入算法

datastructure6_4

(在线性表a3位置之前插入一个新元素e(e=6))

插入位置在最后在线性表的最后添加一个元素不需要移动直接添加

插入位置在最前在原线性表的第1个元素之前插入一个新的元素,线性表的所有元素都要移动移动次数最多

插入位置中间如下

datastructure6_5

datastructure6_6

datastructure6_7

🥫删除算法

datastructure6_8

🧈小结

查找、插入、删除的平均算法复杂度为O(n)

空间复杂度显然顺序表操作没有占用辅助空间算法的空间复杂度O(1)

🍠线性表的优点

  • 存储密度大(结点本身所占用的空间/结点结构所占存储量=1)无需为表示表中元素之间的逻辑关系,而增加额外的存储空间

  • 可以随机存取表中任意位置的元素

🍣线性表的缺点

  • 插入、删除某一元素需移动大量元素

  • 当线性表长度变化较大时,难以确定存储空间的容量,

  • 数据元素的个数不能自由扩充(存储空间不灵活)

0

评论区