链表(LInked LIst)——链表介绍

风格不统一 提交于 2020-02-16 00:23:02

Linked Lists (链表)


链表是一种线性数据结构,链表中的每一个元素都是一个单独的对象,我们将其称之为节点。每个节点包含一个数据域和一个指向下一个节点的指针域。这些节点可能存储在内存中的不同位置,而不像数组那样存储在连续的内存空间中。

链表中可以存储类似于数组的数据,但是相比数组,链表在存储上具有更多优势。

想象以下人的关系链。如果A认识B,B认识C,那么C就可以通过这个连接链接到A。每个人都可以被视为认识下一个人的节点。

在C语言中,我们定义一个包含数据域和指针域的Node如下:

struct Node{
    int data;
    int Node *next;
}

与数组相比具有的优势

与数组相比,链表具有以下两大优势:

  1. 没有固定大小 链表不需要固定内存大小。当创建一个新节点时,将动态分配用于存储节点的内存位置。没有使用的位置不会占据内存地址。与数组相比,数组智能一次性固定内存大小,且扩充或者缩减数组时代价会非常昂贵。
  2. 插入和删除效率极高 在节点之间进行快速删除和插入所花费的时间恒定。相反,处理数组时,插入和删除需要遍历数组中的所有元素。

算法复杂度

Access Search Insertion Deletion Space
O(n) O(n) O(1) O(1) O(n)

与数组相比具有的劣势

与数组相比,使用链表存在一些缺点

  • 仅能通过线性访问 由于数据是通过节点链接在一起的,因此任何节点只能由链接到该节点的节点访问,不能像数组那样通过索引访问,也不能随机访问节点,必须通过链接搜索所需元素

  • 会占用较多内存空间 节点需要一些额外的内存空间来保存指向下一个节点的指针,因此每个元素相比数组会占用更多内存空间。

链表的创建

创建链表,我们需要根据需要创建链表的数据类型定义一个头节点。
每种类型的列表都具有特定的属性,并且据偶有关列表的优点。

链表的类型

链表的设计形式取决于链表的用途,其中最常见的3中链表类型如下:

  1. 单链表(Singly Linked List)
  2. 双链表(Double Linked List)
  3. 环形链表(Circular Linked List)

更多内容,欢迎关注:


在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!