python算法——数组和链表

内存

数据是怎样存储在计算机中的?
举个例子:
假如你带了3样物品,你需要将他们放进储物柜里,这时你需要3个储物柜把物品放进去。
计算机大致就是这样存储数据的。
计算机存储数据的基本方式有两种——数组和链表。

数组

数组就是将所有的元素放在一起。
假如有1,2,3,4四个数字你要将它们写在纸上
| 1 | 2 | 3 | 4 | 这就是数组。
当这样的情况呢?
| | | x | | |
这里虽然有4个位置但它们不是连在一起的,所以无法建立数组。
如果在添加元素时遇到这种麻烦,那就要将所有元素全部换一个位置来存储(因为数组必须是在一起的)。这就太麻烦了。
有一种解决方法是预留位置,即预留出一定数量的空位以便于添加元素。这样的方法有两个缺点:
1.预留的空位别人不能使用,这就意味着如果你用不上就浪费了预留的位置。
2.当添加数量大于预留位置时,还是需要切换位置。
很显然这种解决方法显得捉襟见肘。
对于这种情况可以用链表解决。

链表

链表的元素可以储存在内存的任何位置上,链表的每个元素都储存了下一个元素的地址。从而使一系列的随机地址串联在一起。
这就类似与剧情类游戏,你需要先到达当前任务的目的地才能获得下一个任务。
所以链表的插入非常简单。
事物都有两面性。链表与一样插入非常方便相反的,查找却非常困难。
因为每个元素都存储着下一个元素的地址。说以当你想要访问第2个元素时就必须先访问第一个元素。同样的道理当你想访问第一百个元素时你需要访问前99个元素,这样你才能获得第100个元素的地址。

运行时间(大O表示法)

先说一说数组的优点:
数组中元素的编号是从0开始的。
应为数组是连在一起的说以要查找起来就十分的简单。
当你知道第一个元素的位置是0时,第二个元素的位置就是1,同样的第一百个元素的位置是99.这样查找起来就非常简单。

他们的读取和插入的大O表示法分别为:
算法图解

删除

删除时链表也是很好的选择,只需要将上一元素的地址修改即可。
对数组而言,插入虽麻烦但删除不同。删除肯定会成功,而且不需更改全部的位置,但需要将删除后的元素全部前移。
这是其操作的运行时间:
算法图解

需要说的是仅当能立即访问要删除的元素时,删除的运行时间才为O(1).通常链表都记录了第一个和最后一个元素,因此删除这些元素的时间是O(1)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值