【算法】数组和链表的通俗比较
来源:互联网 发布:淘宝网买东西先付还是 编辑:程序博客网 时间:2024/05/22 17:10
前言
小编认为,只要对数据结构有些了解,就能分清数组和链表。所以这篇分享看似无意义。BUT,小编最近在看《图解算法》,觉得作者对两者的区分的思路挺棒,所以总结下来,分享出来。
两者的图片定义
图1 数组图
图2 索引图
两者的区别
看上图中的方格像什么?抽屉。OK
图3 抽屉
- 查找
如果我想让你在这些“抽屉”中找到5,怎么做?
在数组中,我会给你提示条件:“在索引为a[5]的抽屉里”——→then,你会直接找到上面标有a[5]的抽屉。
在链表中,找5更像一个寻宝游戏。我会告诉你,5的地址信息在8的抽屉里,8是第一个抽屉。——→你会怎么做?显而易见,先打开8的抽屉,然后找到5的地址,然后再去打开5。
小结:数组更容易查找,其查找的时间复杂度为O(1)。值得注意的是,O(1)的意思不是指能在很少的时间内查找到,而是每个数被查找的所用时间是一样的,比如查找8和5的时间是一样的。
链表在查找方面所用时间多些,其时间复杂度为O(n)。即我没办法一下子知道5在哪,需要借助前方的信息。
- 插入和删除
如果我想插入一串数字“9,10,11”,怎么做?
在数组中,我需要先找到一块能放下这三个数的地方,即找到3个连续的空格,没有。所以,没办法插入。
而在链表中,我可以分开放这三个数,只要把后一个数的位置信息放在前一个中就好,比如把10的位置信息放在9中,我找到9,也就知道了10的位置。
删除与插入类似,在数组中,当删除一个数时,后面的数需要往前移;而在链表中不用。
小结:数组的插入和删除不占优势,其时间复杂度为O(n)。缺点如①当空间不够时,需要再找其余空间,所以插入时速度慢②如果6个数字组占用了10个空间,那如果再没有比4小的数字组时,其余4个就浪费了。
链表的插入和删除更方便些,其时间复杂度为O(1)。对于在链表中插入和删除到底是怎么操作的,这又是另一个问题了。
- 在实际编程中,哪个用的多?
数组。因为数组支持随机访问,而链表只能顺序访问,当然这也不是绝对的,只是说平时用数组的多。
总结
(1)
(2)以上图只是小编为了容易理解,自己画的简化图。真正的数组和链表是什么样的呢?
图4 二维数组
图5 双向链表
(3)以上是小编的个人见解,如有出入,还请读者不吝赐教。
- 【算法】数组和链表的通俗比较
- 一个比较通俗的KMP算法讲解
- KMP算法的next[]数组通俗解释
- KMP算法的next[]数组通俗解释
- KMP算法的next[]数组通俗解释
- KMP算法的next数组通俗解释
- KMP算法的next[]数组通俗解释
- KMP算法的next[]数组通俗解释
- 数组和链表的优缺点比较
- 一个比较通俗的KMP算法讲解(转)
- 【算法】递归与while循环的通俗比较
- 通俗讲解KMP算法和next数组求解
- KMP算法的前缀next数组最通俗的解释
- KMP算法的前缀next数组最通俗的解释
- KMP算法的前缀next数组最通俗的解释
- KMP算法的前缀next数组最通俗的解释
- 通俗的遗传算法
- 比较通俗的RAID图解
- linux常用命令
- 重绘和回流(重排)
- CSU 1803
- 自己的技术面试题
- "node": 符号连接的层数过多
- 【算法】数组和链表的通俗比较
- 单片机 0~99加减
- 打开VS项目时出错 MSBuild。。。
- LeetCode:Median of Two Sorted Arrays
- JavaWeb-JDBC-3-不仅仅只是连接
- MOS管开关电路设计
- Simsci.ProII V8.2工艺流程模拟软件 使用教程手册资料Manual\
- PX4(PIXHAWK)源码开发人员文档(三)——进程间通讯的开发者指南
- linux grep命令详解