叙述下数据结构中的数组和链表

数组

数组是有限的、数据类型相同的一个集合,其内存区域一旦被定义,则大小不能更改,数组的长度在定义时确定,数组中的元素的默认值由其数组类型决定。可通过数组下标访问数组中元素,下标的起始位置永远从0开始。

数组中数据元素的查找

数组在访问操作方面有着独特的性能优势,因为数组不仅仅支持顺序访问,还支持随机访问,我们可以通过下标随机访问数组中任何一个元素,其原理是因为数组中元素的存储是连续的。
当我们通过下标去访问数组中的数据时,并不需要从头开始依次遍历数组,因此数组的访问时间复杂度是 O(1),当然这里需要注意,如果不是通过下标去访问,而是通过内容去查找数组中的元素,则时间复杂度不是O(1),极端的情况下需要遍历整个数组的元素,时间复杂度可能是O(n),当然通过不同的查找算法所需的时间复杂度是不一样的。

数组中数据的插入和删除

数组元素是连续性,导致数据的随机插入和删除效率比较低。

插入

插入元素数组需要检测数组空间是否满足,不满足则需以现有数组长度,拷贝旧数组,新建一个1.5倍的数组,如果新元素要插入在数组的最开头位置,那整个原始数组都需要向后移动一位,此时的时间复杂度为最坏情况即O(n),如果从中间插入,后续相邻后面元素也都需要往后移动,如果新元素要插入的位置是最末尾,则无需其它元素移动,则此时时间复杂度为最好情况即O(1)。

删除

数组的删除与插入类似,假如不是删除最后一个有效元素,其它元素在删除以后,后续元素都要向前移动。如果删除数组末尾的数据,则最好情况时间复杂度为O(1)。如果删除开头的数据,则最坏情况时间复杂度为O(n)。

链表

链表不像数组要求连续性,链表中的数据是逻辑顺序,是通过链表中的指针指向进行实现的,链表数据结构除了要储存本身的数据,还需多储存一个指针,用于指向其后续元素的储存位置,多个元素通过指针域建立关系形成链表。
链表的优势不在于查询,不能通过下标的方式去查询,如果要查找某个节点,则需通过遍历的方式去查询,但插入和删除优于数组,不像数组要大量移动数据来保持连续性,只需修改指针指向即可。(链表数据只是逻辑上相邻,物理不一定相邻,数组则需要逻辑相邻,物理相邻)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值