数据结构--线性表--顺序表(转自B站视频)

线性表是n个具有相同特性的数据元素的有限序列,常见的线性表有:顺序表、链表、栈、队列、字符串。。。

主要操作有:
1、初始化操作,建立一个空的线性表L
2、销毁已存在的线性表L
3、将线性表清空
4、在线性表中L中第i个位置插入新元素
5、删除线性表L中第i个位置元素,用e返回
6、若线性表为空,返回True,否则false
7、返回线性表L的元素个数
8、L中查找与给定值e相等的元素,若成功返回该元素在表中的序号,否则返回0
9、将线性表L中的第i个位置元素返回给e

第一个元素称为起始结点,最后一个元素称为终端结点。
1.1顺序表就是数组,但是在数组的基础上,它还要求数据是连续存储的,不能跳跃间隔。
顺序表的接口实现:插入,删除,查找数据,更改数据,打印数据

查找的思想:

—在线性表L中查找与指定值相同的数据元素的位置
—从表的一端开始,逐个进行记录的关键字和给定值的比较。找到,返回该元素的位置序号,未找到,返回0。
实现方法:

int LocateElem(SqList L, ElemType e){
//在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)
for(i=0;i<L.length;i++)
	if(L.elem[i]==e) return i+1;//查找成功,返回序号
return 0;//查找失败,返回0
}

平均查找长度(ASL):为确定记录在表中的位置,需要与给定值进行比较的关键字的个数的期望值叫做查找算法的平均查找长度。
(1+2+…+n)/n = 1/n + 2/n +…+1 = (n+1)/2
在这里插入图片描述
在这里插入图片描述

插入的思想:

指在表的某个位置上,插入一个新的结点e,使长度为n的线性表变为长度为n+1的线性表。
分为尾部插入,头部插入,任意位置插入
尾部插入:
直接放在最后一个位置,对其赋值
头部位置:把后面的元素依次往后移
任意位置插入:
依次把后面的位置往后移,才可以插入
在这里插入图片描述
算法思想:
(1)判断插入的位置是否合法,因为有可能会出现不在某个区间,如1-n,插入的位置为n+5的话,这样就不合适。
(2)判断顺序表的存储空间是否已满,若已满返回ERROR。
(3)将第n至第i位的元素依次向后移动一个位置,空出第i个位置。
(4)将要插入的新元素e放入第i个位置。
(5)表长加1,插入成功返回OK.
在这里插入图片描述
在这里插入图片描述

如下:
在这里插入图片描述
这个公式表示的意思理解为:
在最后一个位置插入:概率为1/n+1,只需要移动0次
在倒数第二个位置插入:概率为1/n+1,只需要移动1次

在第一个位置插入:概率为1/n+1,只需要移动n次
所以全部相加即为以上公式。时间复杂度为O(n).

顺序表的删除:

同样也是起始位置,任意位置,终端位置
指将表的第i个结点位置删除,使长度为n的线性表变成长度为n-1的线性表。
算法思想:
1、判断删除位置i是否合法(合法值为1<=i<=n).
2、将欲删除的元素保留在e中。
3、将第i+1至第n位的元素依次向前移动一个位置。
4、表长减1,删除成功返回OK。
在这里插入图片描述
在这里插入图片描述
如下:
在这里插入图片描述
表示的意思是:每个元素出现的概率为1/n,出现的次数为n-i次
则O(n).
顺序表的优点就是可以随机存取表中任一元素,缺点就是在插入、删除某一元素时,需要移动大量元素,浪费存储空间。
为克服这一缺点,引出链表。

关于python实现线性表代码:
1、查找

###顺序表查找

def Sequence(L,e):
    for i in L:
        if i == e:
            return L.index(i)

    return 0  ##若一轮结束后依旧没有找到,则返回为0

def Sequence1(L,e):
    for index,ele in enumerate(L):
        if ele == e:
            return index
    return 0  ##若一轮结束后依旧没有找到,则返回为0
a = [1,2,3,4,6,7]

print(Sequence(a,6))
print(Sequence1(a,3))

结果如下:
在这里插入图片描述
2、插入

头部:

a = [1,2,3,4,6,7]
a.insert(0,6)
print(a)

在这里插入图片描述
任意位置:

a.insert(4,5)

在这里插入图片描述
尾部插入:

a.insert(6,5)
print(a)

在这里插入图片描述
3、删除


a = [1,2,3,4,6,7]

#根据索引值删除元素
a.pop(3)
print(a)

#根据元素值删除元素
a.remove(3)
print(a)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值