博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组和链表
阅读量:4180 次
发布时间:2019-05-26

本文共 687 字,大约阅读时间需要 2 分钟。

数组是申请的一块连续的内存空间,并且在编译阶段就要确定空间大小的,同时运行阶段是不允许改变的,意味着所有待办事项在内存中都是相连的(紧靠在一起的)。

链表是动态申请的内存空间,现用现申,比数组灵活。

当同时读取所有元素时,链表的效率高,读第一个,读第二个。

当你需要跳跃,链表的效率就很低了。

数组是连续的内存,对于访问数据,可以通过下标直接读取,时间复杂度为O(1),而添加删除数据就比较麻烦,需要移动操作数所在位置后的所有数据,时间复杂度为O(N)。

链表是物理上非连续的内存空间,对于访问数据,需要从头便利整个链表直到找到要访问的数据,没有数组有效,但是在添加和删除数据方面,只需要知道操作位置的指针,很方便可以实现增删,教数组比较灵活有效率。

 

数组

链表

读取

O(1)

O(n)

插入

O(n)

O(1)

删除

O(n)

O(1)

插入多,读取少。用链表。

插入少,读取多。用数组。

从中间插入数据多使用链表,只需要修改它前面的那个元素指向的地址就行了,而数组,必须将后面的元素都向后移动,如果空间不足,还要重新复制新的空间。

不同点:

从逻辑结构看

  1. 数组必须事先规定长度,不能适应数据动态的增减,当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以直接根据下标直接存取,方便查找。
  2. 链表动态地存储分配,可以适应数据动态地增减,且方便插入,删除数据

从内存上看

  1. 数组从栈中分配空间,对程序员方便快速,但自由度小
  2. 链表从堆中分配空间,自由度大但申请管理比较麻烦。

综上,对于快速访问数据,不经常增删的时候选择数组,对经常增删的数据选择链表。

转载地址:http://srqai.baihongyu.com/

你可能感兴趣的文章
第三篇: 服务消费者(Feign)(Greenwich版本)
查看>>
获取客户的真实IP地址
查看>>
第四篇: 熔断器(Ribbon+Feign)(Greenwich版本)
查看>>
Linux的常用命令(一)
查看>>
Linux的常用命令(二)
查看>>
第六篇: 分布式配置中心(Greenwich版本)
查看>>
SpringBoot | 配置logback-spring.xml
查看>>
SpringBoot | 第一章:构建第一个SpringBoot工程
查看>>
SpringBoot | 第二章:配置多环境以及上传文件
查看>>
Spring Data JPA |自定义非实体类的映射
查看>>
SpringBoot | 常用注解记录
查看>>
JavaBean对象转换EntityUtils工具类
查看>>
Maven常用命令
查看>>
SpringBoot | 运行报错,无法加载oracle连接驱动
查看>>
为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
查看>>
AWS EC2如何从普通用户切换为root用户
查看>>
click方法不生效的
查看>>
mysql排行榜并列与不并列
查看>>
SpringBoot | Mybatis申明为Mapper文件
查看>>
JPA主键生成策略
查看>>