【带头学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 定义一个结点(结构体)

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<<pb->num<<" "<<pb->name<<endl;
        //pb移动到下一个
        pb = pb->next;
    }

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序小白Erike.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值