链表与数组的区别

物理存储结构不同

链表与数组在计算机中存储元素采用不同的物理存储结构,数组是顺序存储结构,链表是链式存储结构。实际上数组和链表都属于线性表,线性表在计算机内可以采用不同的存储方式,采用顺序存储结构时称为为数组,采用链式存储结构时称为为链表。

线性表是一种最常用且最简单的数据结构,它是由零个或多个数据元素构成的有限序列。线性表元素之间的逻辑关系是相邻关系,在长度为n的线性表中,第i-1个元素领先于第i个元素,第i个元素领先于第i+1个元素,第i-1个元素为第i个元素的直接前驱元素,第i+1个元素为第i个元素的直接后驱(如下图所示)。

线性表逻辑结构

因此链表与数组的逻辑结构是相同的,都是零个或多个数据元素构成的线性表。在计算内存储线性表有两种方式:一种是顺序存储结构;一种是链式存储结构。采用顺序存储结构的线性表也称为数组,采用链式存储结构的线性表也称为链表。

数组的存储结构

数组用一组地址连续的存储单元来存储表中的元素,这种结构称为顺序存储结构,它以元素在计算机内物理位置上的紧邻来表示线性表中数据元素之间相邻的逻辑关系,如下图所示。

数组的顺序存储结构

上图给出了数组的存储结构,数组采用一组连续的存储单元来存储数组内的元素,数组逻辑上相邻的元素在物理存储上也相邻。第i个元素的存储位置和数组的起始位置相差一个和元素在数组中的序号成正比的常数,根据元素在数组中的序号和数组的起始位置,就可以定位一个数组元素的存储位置,因此数组也是一个随机存取的结构。

链表的存储结构

链式存储结构不要求逻辑上相邻的两个元素在物理位置上也相邻,链表元素除了存储元素本身的数据外,还需要存储一个指向下一个元素的位置数据,程序可以通过该信息访问到下一个元素。元素数据和位置数据构成了链表数据元素的存储映像,该存储映像也称为链表的节点。节点包括两个存储域:一个存储域存储元素本身的数据,称为数据域;一个存储域存储链表中下一个元素的位置数据,称为指针域。n个节点构成一个链表,当节点只包含一个指针域时,称为单链表。如下图所示。

链表节点数据结构

单链表

上图给出了单链表结构,整个链表的存取必须从头指针开始,头指针指示链表中第一个节点的存储位置。由于最后一个数据元素没有直接后继,因此线性单链表中最后一个节点的指针为空(NULL)。

内存分配方式不同

数组的存储空间一般采用静态分配,在分配之前需要确定数组的大小,按照数组的大小分配内存,内存申请单位为数组内所有元素占用的空间,数组的长度一般不宜动态扩展,申请的内存区域一般在栈区;链表的存储空间一般采用动态分配,内存申请单位一般为一个链表节点的空间,链表的长度可以动态扩展,申请的内存区域一般在堆区。

元素的存取方式不同

数组是顺序存储结构,数组元素可以直接通过元素的下标(索引)进行直接存取,时间复杂度为O(1);链表是链式存储结构,链表在进行元素存取时,需要遍历链表,时间复杂度为O(n),n为链表的长度。

元素的插入和删除方式不同

数组在进行元素插入和删除时,需要移动数组内的元素,以保持数组元素排列的顺序性,时间复杂度为O(n);链表在进行元素插入和删除时无需移动链表内的元素,但由于链表不是顺序存储结构,为寻找第i个元素,仍然需要遍历链表,因此时间复杂度为O(n)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值