数组与链表

1、内存

内存的工作原理:假设有一个柜子,柜子中有很多抽屉,每个抽屉有每个抽屉的地址,每个抽屉存放一样东西。当你存一把伞在抽屉中,这个抽屉即内存,抽屉地址即内存地址。

2、数组

数组是需要一串连续内存。

假设需要将这些待办事项存储在内存中,使用数组意味着所有待办事项在内存中都是相连的(紧靠在一起的)。
图1
当需要再添加一个事项时,后面的已经被占用,所以又要向计算机申请一块可容纳4个待办事项的内存,再将所有待办事项都移到那里。
一种解决办法是“预留”,即预留好10个座位。
(1) 你额外请求的位置可能根本用不上,这将浪费内存。你没有使用,别人也用不了。
(2) 待办事项超过10个后,你还得转移。

3、链表

链表中的元素可以存放在内存任何位置。
链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。
图2
但是当你需要读取链表最后一个元素时,不能直接读取,需要必须先访问元素#1,从中获取元素#2的地址,再访问元素#2并从中获取元素#3的地址,以此类推,直到访问最后一个元素。
需要同时读取所有元素时,链表的效率很高;但如果你需要跳跃,链表的效率真的很低。要随机地读取元素时,数组的效率很高。

需要随机地读取元素时,数组的效率很高,因为可迅速找到数组的任何元素。在链表中,元素并非靠在一起的,你无法迅速计算出第五个元素的内存地址,而必须先访问第一个元素以获取第二个元素的地址,再访问第二个元素以获取第三个元素
的地址,以此类推,直到访问第五个元素。

四、栈 & 堆

——算法图解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值