【带头学C++】----- 七、链表 ---- 7.1 链表的概述

目录

七、链表

7.1 链表的是什么?

7.2数组和链表的优点和缺点

7.3 链表概述

​编辑

7.4 设计静态链表

7.4.1 定义一个结点(结构体)

7.4.2 使用头结点构建一个单向链表

七、链表

7.1 链表的是什么?

       C++链表是一种数据结构,用于存储和组织元素的集合。它由一个节点的序列组成,每个节点包含数据和一个指向下一个节点的指针。

         链表的节点包含两个重要的部分:数据和指针。数据部分存储实际的元素值,可以是任何数据类型。指针部分指向链表中下一个节点的地址,通过这种方式将节点连接在一起形成链表。

链表通常分为两种类型:单向链表和双向链表。

  • 单向链表(Singly Linked List):每个节点只有一个指向下一个节点的指针。链表的第一个节点称为头节点,最后一个节点称为尾节点,尾节点的指针通常为NULL。

  • 双向链表(Doubly Linked List):每个节点既有一个指向下一个节点的指针,也有一个指向前一个节点的指针。这种结构使得在链表中进行前向和后向遍历变得更加方便和高效。

       链表的优点是可以动态地插入和删除节点,而不需要像数组那样移动大量的元素。然而,链表的缺点是无法通过索引直接访问元素,需要通过遍历链表来寻找指定位置的节点。

       在C++中,可以使用指针来实现链表。常见的链表操作包括在链表的头部插入节点、在链表的尾部插入节点、删除节点、查找节点等。

7.2数组和链表的优点和缺点

静态数组int arr[5];必须事先确定数组元素的个数,过多浪费过小容易溢出,删除插入数据效率低。(需要移动大量的数据)

动态数组:不需要事先知道元素的个数,在使用中动态申请,删除插入数据效率低。(需要移动大量的数据)

(数组优点:遍历元素效率高)

链表:不需要事先知道数据的个数,在使用中动态申请,插入删除不需要移动数据。
(链表缺点:遍历效率低)

7.3 链表概述

       链表是由一个个节点组成,节点没有名字,每个节点从堆区动态申请,节点间物理上是非连续的,但是每个节点通过指针域 保存下一个节点的位置达到逻辑上连续。

【带头学C++】----- 七、链表 ---- 7.1 链表的概述_第1张图片

不带头结点就是使用一个指针变量来保存第一个结点的地址。带头结点的就是牺牲一个空结点(数据区域不存储数据)来存储第一个结点的地址。 

【带头学C++】----- 七、链表 ---- 7.1 链表的概述_第2张图片

7.4 设计静态链表

7.4.1 定义一个结点(结构体)

struct stu{
    //数据域
    int num;
    char name[32];
    //指针域
    struct stu *next;
};

7.4.2 使用头结点构建一个单向链表

    struct stu node1 = {101,"Tom",nullptr};
    struct stu node2 = {102,"Jery",nullptr};
    struct stu node3 = {103,"Spike",nullptr};
    struct stu node4 = {104,"Butch",nullptr};
    struct stu node5 = {105,"Galore",nullptr};

    //定义链表头结点
    struct stu *head = &node1;
    node1.next = &node2;
    node2.next = &node3;
    node3.next = &node4;
    node4.next = &node5;
    node5.next = nullptr;

    //遍历链表
    struct stu *pb = head;
    while (pb != nullptr) {
        //访问数据
        cout<num<<" "<name<next;
    }

【带头学C++】----- 七、链表 ---- 7.1 链表的概述_第3张图片

你可能感兴趣的:(C++从基础到抗大旗,c++,链表,开发语言,笔记,学习,算法,数据结构)