数组跟链表存储详解

顺序表的存储:由存储空间一段连续的地址组成,一边表现为数组,可以通过下标跟初始位置确定第i个元素的位置,因此顺序表的优点是便于查询数据。

链表:由存储空间内不连续的空间组成,每一个存储单元中除了存储所需数据,还存储下一个存储单元的位置,优点是方便扩充跟插入节点。

下边说一说顺序表(数组)跟链表的增删改查的时间复杂度:

数组:

1、有序数组:

添加数据:时间复杂度 :O(n)

原因:因为有序数组,我们查找时采用的是二分查找,时间复杂度O(log n),找到数据应该存放的位置后,将插入位置跟插入位置以后的数据统一后移一个单位,此时时间复杂度O(n),总的时间复杂度O(n)+O(log n)属于O(n)级别。

查找数据:时间复杂度 :O(log n)

原因:因为有序数组,我们查找时采用的是二分查找,时间复杂度O(log n),以2的指数级别缩减查找长度。

删除数据:时间复杂度 :O(n)

原因:因为有序数组,我们查找时采用的是二分查找需要删除的数据,时间复杂度O(log n),删除完成以后需要将删除位置后边的数据前移一个位置,时间复杂度O(n),总的时间复杂度O(n)+O(log n)属于O(n)级别。

修改数据:时间复杂度 :O(n)

原因:因为有序数组,我们将数据修改后,需要进行一次数据比较移动,因此时间复杂度属于O(n)级别

2、无序数组:

添加数据:当数组中还有空间时,时间复杂度 :O(1),当数组中无空间时,需要重新开辟空间,将以前的元素复制过来,时间复杂度 :O(n),

查找数据:时间复杂度 :O(n)

原因:因为数组无序,我们查找时时必须遍历整个数组,因此时间复杂度为O(n)。

删除数据:时间复杂度 :O(n)

原因:因为数组无序,我们必须遍历整个数组找到要删除的数据,时间复杂度为O(n),删除完成后还需要将删除位置后边的数据前移一个位置,时间复杂度O(n),总的时间复杂度为2O(n),属于O(n)级别。

修改数据:时间复杂度 :O(n)

原因:因为数组无序,我们必须遍历整个数组进行修改,因此时间复杂度为O(n)。

链表:

增加数据:链表有序时:O(n) ,无序时O(1)

原因:因为有序链表无二分查找一说,所以我们需要遍历整个链表去找到插入位置,无需链表只需要在表头或者表尾添加数据即可。

删除数据:O(n)

原因:我们需要遍历整个链表去查找需要删除的数据。

修改数据:O(n)

原因:我们需要遍历整个链表去查找需要修改的数据。

查找数据:O(n)

原因:我们需要遍历整个链表去查找需要的数据。链表有序无序对查找数据的时间复杂度级别不影响,因为有序无序都需要遍历一遍链表,但是相对于无序,有序还是更快一点的,毕竟不需要遍历完链表,比遍历完边表肯定要快。

    原文作者:对明天的期待丶
    原文地址: https://blog.csdn.net/qq_39429962/article/details/82844775
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞