MichaelBlog

double i = Double.MAX_VALUE; while(i == i + 1){ System.out.print ("学无止境");};

导航

数据结构与算法: 链表

使用数组包含以下限制:
线性表(数组):可以随机存储,存储密度高.但是要求连续空间,改变容量不方便.

在程序中使用之前,必须事先知道数组的大小。
增加阵列的大小是一个耗时的过程。在运行时扩展数组的大小几乎是不可能的。
数组中的所有元素都需要连续存储在内存中。在数组中插入任何元素都需要移动其所有前置元素。
链表是可以克服数组的所有限制的数据结构。使用链表很有用,因为,它动态分配内存。链表的所有节点都非连续地存储在内存中,并在指针的帮助下链接在一起。
大小不再是问题,因为我们不需要在声明时定义其大小。列表根据程序的需求增长,并限制为可用的内存空间。

链表:

单链表:不要求大片连续空间,改变容量方法,但是不可以随机存取,要耗费一定的空间存放指针

  • 链表可以定义为随机存储在内存中的称为节点的对象的集合。
  • 节点包含两个字段,即存储在该特定地址的数据和包含内存中下一个节点地址的指针。
    在这里插入图片描述

列表的最后一个节点包含指向 null 的指针。

  • 链表不需要连续存在于内存中。节点可以驻留在内存中的任何位置,并链接在一起以形成列表。这实现了空间的优化利用。
  • 列表大小限制为内存大小,不需要提前声明。
  • 空节点不能存在于链接列表中。
  • 我们可以将基元类型或对象的值存储在单个链接列表中。

单向链表

单链表可以定义为有序元素集的集合。元素的数量可能会根据程序的需要而有所不同。单链接列表中的节点由两部分组成:数据部分和链接部分。节点的数据部分存储将由节点表示的实际信息,而节点的链接部分存储其直接后继者的地址。

单向链或单向链只能沿一个方向遍历。换句话说,我们可以说每个节点只包含下一个指针,因此我们不能以相反的方向遍历列表。
在这里插入图片描述

DS 单链接列表
在上图中,箭头表示链接。每个节点的数据部分都包含学生在不同科目中获得的分数。列表中的最后一个节点由空指针标识,空指针存在于最后一个节点的地址部分。我们可以在列表的数据部分拥有尽可能多的元素。

双向链表

请添加图片描述

Node 创建

struct node   
{  
    struct node *prev;  
    int data;  
    struct node *next;  
};  
struct node *head;   

循环单链表

在这里插入图片描述
表头结点的prior指向NULL;
表尾结点的next指向NULL.

循环双链表

在这里插入图片描述

表头结点的prior指向表尾结点;
表尾结点的next指向头结点.

在数据结构中跳出链表

请添加图片描述
跳过列表中有以下类型的操作。

  • 插入操作:它用于在特定情况下将新节点添加到特定位置。
  • 删除操作:它用于在特定情况下删除节点。
  • 搜索操作:搜索操作用于搜索跳过列表中的特定节点。

posted on 2022-04-16 09:47  Michael_chemic  阅读(89)  评论(0)    收藏  举报