• 【带头学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 链表概述

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

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

    7.4 设计静态链表

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

    1. struct stu{
    2. //数据域
    3. int num;
    4. char name[32];
    5. //指针域
    6. struct stu *next;
    7. };

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

    1. struct stu node1 = {101,"Tom",nullptr};
    2. struct stu node2 = {102,"Jery",nullptr};
    3. struct stu node3 = {103,"Spike",nullptr};
    4. struct stu node4 = {104,"Butch",nullptr};
    5. struct stu node5 = {105,"Galore",nullptr};
    6. //定义链表头结点
    7. struct stu *head = &node1;
    8. node1.next = &node2;
    9. node2.next = &node3;
    10. node3.next = &node4;
    11. node4.next = &node5;
    12. node5.next = nullptr;
    13. //遍历链表
    14. struct stu *pb = head;
    15. while (pb != nullptr) {
    16. //访问数据
    17. cout<num<<" "<name<
    18. //pb移动到下一个
    19. pb = pb->next;
    20. }

  • 相关阅读:
    c++11新特性篇-右值引用
    Microsoft 网络监控
    阿里工作7年,肝到P8就剩这份学习笔记了,已助朋友拿到10个Offer
    继承:单继承、多继承和多重继承
    PHP笔记-使用composer搭建Laravel项目及phpStorm开发环境搭建
    高质量实时渲染笔记
    如何破局大促“内卷”压力? TiDB + 京东云将数据库成本降低三分之二性能提升 8 倍
    MySQL数据类型
    FPGA_状态机工作原理
    JavaScript理论篇1之基础理论
  • 原文地址:https://blog.csdn.net/Phofomy/article/details/134444063