数据结构与算法系列——数组和链表

数组的介绍

在每一种编程语言种,基本都有数组这种数据类型,当然它不仅是一种数据类型,还是一种基础、简单的数据结构。
数组的定义是:数组是一种线性表数据结构,他用一组连续的内存空间,来储存一组相同类型的数据

数组的特点

数组是一种线性表,线性表就是数据像一条线一样,排列成一条有序的队,每个数据只有前和后两个方向。数组在内存中的储存是连续的,声明数组的时候会在内存中找一块连续的空间,来依次储存数组的每个数据。数组需要预留储存空间,在使用前需要先申请内存的大小,很有可能会浪费空间。数组随机访问效率高,因为在内存中是连续的,所以可以直接访问该地址的数据。但是数组因为连续这一特点使得它的的插入和删除效率低,因为需要把插入和删除位置后边的所有数据后挪或者前移。数组不利于动态扩展,数组一旦定义,长度是固定的,扩展起来比较麻烦,需要重新定义数组。

数组的优点
  • 随机访问性高
  • 查找速度快
数组的缺点
  • 插入和删除效率低
  • 不易于扩展
  • 对内存要求高,需要连续的空间
  • 有可能造成内存的浪费
链表的介绍

链表也是一种基本的数据结构,它有一系列节点组成,每个节点包括一个数据结构(用来存放各类型的数据),还包括一个指向下一个节点的指针。

链表的特点

链表和数组一样也是线性表,但是链表在内存中的储存是非连续、非顺序的。每一个数据都保存了一个指针,指向下一个数据的内存地址,这样通过这个指针就可以找到下一个数据,也正是因为是非连续的,所以随机访问和数据的查找比较麻烦,每次都要从头开始依次向后直到找到目标数据为止。但是插入和删除操作比较容易,因为不是连续有序的,所以插入的时候,只需要把前一个数据的指针指向新数据,然后新数据的指针指向后一个数据就可以了,删除的时候只需要把后一个数据告诉前一个数据就可以了,其他的数据都不需要做修改。链表还支持动态扩展,可以随意增加和删除数据。

链表的优点
  • 插入、删除速度快
  • 内存利用率高,不浪费
  • 易于扩展
链表的缺点
  • 不能随机访问,查找效率低

最后我们用前边学习的时间复杂度来分析数组和链表的操作

\数组链表
读取O(1)O(n)
插入O(n)O(1)
删除O(n)O(1)
总结

对于已知大小,并且对数据操作读取较多,插入、删除较少,可以直接用数组。由于链表在有时候不能直接储存基本数据类型,所以性能会有一点点的损耗。
我们在平时业务逻辑的时候可以直接使用像链表这种容器类,虽然有一点点性能损耗,但影响很小。但如果做底层的开发,对性能要求比较高的时候,直接用数组更为合适。


欢迎关注公众号:「努力给自己看」

公众号200x200

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值