数组链表的概念及区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组链表的概念及区别相关的知识,希望对你有一定的参考价值。

参考技术A python中的list并不是我们传统意义上的列表
传统列表——通常也叫作链表(linked list)是由一系列节点来实现的,其中每个节点都持有一个指向下一节点的引用
简单实现起来应该就像下面那样:

接下来,我们就可以将所有的节点构造成一个列表了:

这是一个所谓的单向链表,双向链表的各节点中还需要持有一个指向前一个节点的引用
但python中的list则与此有所不同,它不是由若干个独立的节点相互引用而成的,而是一整块单一连续的内存区块,我们通常称之为“数组”(array),这直接导致了它与链表之间的一些重要区别。
例如如果我们要按既定的索引值对某一元素进行直接访问的话,显然使用数组会更有效率。因为,在数组中,我们通常可以直接计算出目标元素在内存中的位置,并对其进行直接访问。而对于链表来说,我们必须从头开始遍历整个链表。
但是具体到insert操作上,情况又会有所不同。对于链表而言,只要知道了要在哪里执行insert操作,其操作成本是非常低的,无论该列表中有多少元素,其操作时间大致上是相同的。而数组就不一样了,它每次执行insert操作都需要移动插入点右边的所有元素,甚至在必要的时候,我们可能还需要将这些列表元素整体搬到一个更大的数组中去。

数组数据是连续的,一般需要预先设定数据长度,不能适应数据动态的增减,当数据增加是可能超过预设值,需要要重新分配内存,当数据减少时,预先申请的内存未使用,造成内存浪费。链表的数据因为是随机存储的,所以链表可以动态的分配内存,适应长度的动态变化
1.数组的元素是存放在栈中的,链表的元素在堆中
2.读取操作:数组时间复杂度为O(1),链表为O(n)
3.插入或删除操作:数据时间复杂度为O(n),链表为O(1)

以上是关于数组链表的概念及区别的主要内容,如果未能解决你的问题,请参考以下文章

C语言链表

链表的结构

数据结构---线性表(链表)

数据结构--单链表的实现(c语言实现)

数据结构--单链表的实现(c语言实现)

数据结构基础学习——栈的概念及代码实现