day7-数据结构之链表

一、定义:
链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

二、链表与数组的区别:
两者的区别:
1.数组静态分配内存,链表动态分配内存。
2.数组在内存中是连续的,链表是不连续的。
3.数组利用下标定位,查找的时间复杂度是O(1),链表通过遍历定位元素,查找的时间复杂度是O(N)。
4.数组插入和删除需要移动其他元素,时间复杂度是O(N),链表的插入或删除不需要移动其他元素,时间复杂度是O(1)。

数组的优点:
1.随机访问性比较强,可以通过下标进行快速定位。
2.查找速度快

数组的缺点:
1.插入和删除的效率低,需要移动其他元素。
2.会造成内存的浪费,因为内存是连续的,所以在申请数组的时候就必须规定七内存的大小,如果不合适,就会造成内存的浪费。
3.内存空间要求高,创建一个数组,必须要有足够的连续内存空间。
4.数组的大小是固定的,在创建数组的时候就已经规定好,不能动态拓展。

链表的优点:
1.插入和删除的效率高,只需要改变指针的指向就可以进行插入和删除。
2.内存利用率高,不会浪费内存,可以使用内存中细小的不连续的空间,只有在需要的时候才去创建空间。大小不固定,拓展很灵活。

链表的缺点:
查找的效率低,因为链表是从第一个节点向后遍历查找。

单链表和双链表的区别:
在这里插入图片描述
1.单链表的每一个节点中只有指向下一个结点的指针,不能进行回溯,适用于节点的增加和删除。
2.双链表的每一个节点给中既有指向下一个结点的指针,也有指向上一个结点的指针,可以快速的找到当前节点的前一个节点,适用于需要双向查找节点值的情况

三、常用操作:
(1)访问Access O ( n ) O(n) O(n)
从头到尾遍历每个元素。

(2)搜索Search O ( n ) O(n) O(n)
找到某个元素,从头到尾遍历每个元素。

(3)插入Insert O ( 1 ) O(1) O(1)
只需要修改指针,仅仅是插入方式的时间复杂度,而不包含找到该插入点。

(4)删除Delete O ( 1 ) O(1) O(1)
只需要修改指针。

链表特点:
适合写,不适合读,适用于读少写多的场景。

四、python中链表具体操作:
(1)创建链表

linkedlist = deque()

(2)添加元素 O ( 1 ) O(1) O(1) O ( n ) O(n) O(n)

linkedlist.append(1) # 尾端加入,O(1)
linkedlist.append(2)
linkedlist.append(3)
print(linkedlist) # deque([1, 2, 3])

linkedlist.insert(2, 99) # 中间某个地方加入,O(n)
print(linkedlist) # deque([1, 2, 99, 3])

(3)访问元素 O ( n ) O(n) O(n)

element = linkedlist[2]
print(element) # 99

没法根据linkedlist的内存地址计算到某一个元素的内存地址,所以只能从头到尾遍历。

(4)搜索元素 O ( n ) O(n) O(n)

index = linkedlist.index(99)
print(index) # 2

把链表从头到尾查一遍,找到99这个元素对应得索引。

(5)更新元素 O ( n ) O(n) O(n)

linkedlist[2] = 88
print(linkedlist) # deque([1, 2, 88, 3])

(6)删除元素 O ( n ) O(n) O(n)

linkedlist.remove(88)
print(linkedlist)  # deque([1, 2, 3]),删除某个元素
del linkedlist[2]
print(linkedlist)  # deque([1, 2]),删除某个索引上的值

(7)获取链表长度 O ( 1 ) O(1) O(1)

length = len(linkedlist)
print(length)  # 2

创建链表时会有个变量来统计长度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值