数组和链表比较

数组优缺点

  • C/C++直接支持
  • 提供随机访问
  • 在编译时确定大小
  • 插入和删除元素费时

链表优缺点

  • 运行时确定大小
  • 快速插入和删除元素
  • 不能随机访问
  • 用户必须提供编程支持

删除和插入元素过程

  • 在数组中插入元素,必须移动其他元素以腾出空位,然后再插入,插入的元素离数组开头越近,要被移动的元素越多。在链表中插入节点却非常简单,只需要给两个指针赋值。
  • 在数组中删除一个元素同样要移动许多相关元素,但是链表删除节点只需要重新设置一个指针并释放被删除节点占用的内存即可。

访问元素

对于数组而言,可以使用数组下标直接访问该数组的任意元素,这叫做随机访问。对于链表而言,必须从链表的首节点开始,逐个节点移动到要访问的节点,这叫做顺序访问。可以先排序,再查找,以提高效率。

总结

选择何种数据类型取决于具体的问题。如果因频繁插入和删除元素导致经常调整大小,而不需要经常查找,选择链表比较好。如果只是偶尔插入或删除项,但是需要经常查找,使用数组更好。
如果需要一种支持频繁插入和删除项又支持频繁查找的数据形式。数组和链表都无法胜任。应选择二叉查找树

链表和数组的优缺点对比相关推荐

  1. 数组和链表的区别和优缺点总结!

    数组和链表是两种基本的数据结构,他们在内存存储上的表现不一样,所以也有各自的特点. 链表中各结点在内存中的存放位置是任意的. 链表与数组的主要区别 (1)数组的元素个数是固定的,而组成链表的结点个数可 ...

  2. 链表及链表与数组的区别优缺点

    链表的概念   链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.   链表的结构是多式多样的,当时通常用的也就是两种:    无头单向非循环列表: ...

  3. 用链表和数组实现HASH表,几种碰撞冲突解决方法

    Hash算法中要解决一个碰撞冲突的办法,后文中描述了几种解决方法.下面代码中用的是链式地址法,就是用链表和数组实现HASH表. he/*hash table max size*/ #define HA ...

  4. JSON与XML优缺点对比分析

    1. 定义介绍 1.1 XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种 ...

  5. 磁盘阵列RAID原理、种类及性能优缺点对比

    磁盘阵列RAID原理.种类及性能优缺点对比 磁盘阵列(Redundant Arrays of Independent Disks,RAID) 存储的数据一定分片: 分基于软件的软RAID(如mdadm ...

  6. java数组和链表的区别_java中链表和数组的区别?

    综述:数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可.链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可.貌似链表比数组还要麻烦些,而且效率低些. 想到这些相同处中的一些细微的 ...

  7. 数据结构 - 链表和数组的区别

    文章目录 数据结构 - 链表和数组的区别 1.在内存上 2.时间复杂度 3.链表的结构 4.各自的优缺点 5.为什么使用较常用的是单头链表 数据结构 - 链表和数组的区别 1.在内存上 数组是连续内存 ...

  8. C语言的链表和数组-诺禾

    许多编程问题,如创建一个简单链表或队列,都可以用链表(指的是动态分配结构的序列链)或数组来处理.每种形式都有其优缺点,所以要根据具体问题的要求来决定选择哪一种形式.表17.1总结了链表和数组的性质. ...

  9. 数据结构--单链表(数组)

    文章目录 单链表 单链表 用数组实现的单链表可以在任意位置插入.删除.替换一个数,相比于用结构体和指针实现的动态链表而言,数组模拟链表运行的速度非常快,动态链表基本会出现超时的现象.但缺点是浪费内存 ...

最新文章

  1. android 刷新某条数据_Android 支持刷新、加载更多、带反弹效果的RecyclerView
  2. EXT.JS的PROXY放在哪里,STORE放在哪里,绝对是个技术活儿啊。
  3. 网易云信,发送验证码短信C#版代码
  4. AJAX 状态值(readyState)与状态码(status)详解
  5. redis key命名规范_redis简介
  6. 0084-CYX的异己
  7. cass等距离等分线段的命令键_南方cass快捷命令
  8. npoi合并取消合并单元格
  9. 数据分析3_淘宝用户行为分析_阿里云天池
  10. CAN学习笔记---负载率计算
  11. 开热点给电脑消耗大吗_手机开启WiFi热点,提供流量给电脑上网,可行吗?
  12. 离职前一定要删除这几个文件,不然你的微信聊天记录全被别人看了
  13. 数据库 - 字段属性
  14. 在java中使用JDBC连接mysql数据库时的服务器时区值无法识别或表示多个时区的问题解决方案
  15. Qt(C++)中如何连接sqlite3数据库及如何使用
  16. ogr2ogr转坐标
  17. K8S 的HPA、VPA等
  18. JavaScript核心 DOM 和 BOM操作
  19. Android直播开发之旅(4):MP3编码格式分析与lame库编译封装
  20. 支付清结算之账户和账务处理(详解)

热门文章

  1. 计算机系统 程序人生-Hello’s P2P
  2. 箭头函数与function的区别
  3. 焊接机器人的坡口填充功能_焊接坡口的钝边和间隙各起什么作用
  4. 1037 在霍格沃茨找零钱(JAVA)
  5. mysql 添加用户_Mysql添加用户以及授权等操作详解
  6. 如果遇到Xshell键盘无法使用,你需要这样做!
  7. 初中生计算机英语作文,初中生英语作文范文
  8. swagger快速入门(springfox)
  9. 卷积码译码:硬判决维特比(Viterbi)译码
  10. Ubuntu系统根目录文件已满——处理方法