2025-03-14 学习记录--C/C++-DS-头结点和头指针的区别

DS-头结点和头指针的区别 ⭐️

1. 头指针(Head Pointer)🍭

  • 定义:📚

    • 头指针是指向链表第一个节点的指针。

    • 它是一个指针变量,存储的是链表中第一个节点的地址。

  • 特点:🍰

    • 头指针始终指向链表的第一个节点。

    • 如果链表为空(即没有节点),头指针的值为 NULL

  • 作用:🦋

    • 通过头指针可以访问整个链表。

    • 头指针是链表的入口,没有头指针就无法访问链表。

  • 示例:🌰

c 复制代码
List head; // head 是头指针
  • 如果 链表为空head = NULL
  • 如果 链表不为空head 指向第一个节点

2. 头结点(Head Node)🍭

  • 定义:📚

    • 头结点是链表中的一个特殊节点,位于链表的第一个元素之前。

    • 它是一个实际的节点,通常不存储有效数据(或存储一些辅助信息,如链表长度)。

  • 特点:🍰

    • 头结点的 Next 指针指向链表的第一个有效节点。

    • 即使链表为空,头结点仍然存在。

  • 作用:🦋

    • 头结点可以简化链表的操作,例如在插入和删除节点时不需要特殊处理空链表的情况。

    • 头结点的数据域通常不使用,或者用于存储链表的元信息(如长度)。

  • 示例:🌰

c 复制代码
struct Node {
    int Data;
    struct Node* Next;
};

struct Node headNode; // headNode 是头结点
headNode.Next = NULL; // 初始时链表为空
  • 如果 链表为空headNode.Next = NULL
  • 如果 链表不为空headNode.Next 指向第一个有效节点

3、头指针 vs 头结点 🍭

特性 头指针(Head Pointer) 头结点(Head Node)
类型 指针变量 实际节点
存储内容 链表中第一个节点的地址 数据域(通常为空)和指向第一个节点的指针
链表为空时 值为 NULL 存在,Next 指针为 NULL
作用 链表的入口,用于访问链表 简化链表操作,避免空链表的特殊处理
示例 List head; struct Node headNode;

4、示例代码 🍭

(1)、使用头指针的链表 🎈
c 复制代码
#include <stdio.h>
#include <stdlib.h>

struct Node {
    int Data;
    struct Node* Next;
};

typedef struct Node* List;

int main() {
    List head = NULL; // 头指针,初始为空

    // 插入一个节点
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->Data = 1;
    newNode->Next = NULL;

    head = newNode; // 头指针指向新节点

    printf("头指针链表:%d\n", head->Data); // 输出:1

    return 0;
}
(2)、使用头结点的链表 🎈
c 复制代码
#include <stdio.h>
#include <stdlib.h>

struct Node {
    int Data;
    struct Node* Next;
};

int main() {
    struct Node headNode; // 头结点
    headNode.Next = NULL; // 初始时链表为空

    // 插入一个节点
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->Data = 1;
    newNode->Next = NULL;

    headNode.Next = newNode; // 头结点的 Next 指向新节点

    printf("头结点链表:%d\n", headNode.Next->Data); // 输出:1

    return 0;
}

5、总结 🍭

  • 头指针:🌈

    • 是指向链表第一个节点的指针。

    • 链表为空时,头指针为 NULL

    • 是链表的入口,用于访问链表。

  • 头结点:🌈

    • 是链表中的一个特殊节点,位于第一个有效节点之前。

    • 链表为空时,头结点仍然存在,其 Next 指针为 NULL

    • 用于简化链表操作,避免空链表的特殊处理。

相关推荐
MarkHD5 小时前
智能体在车联网中的应用:第51天 模仿学习与离线强化学习:破解数据效率与安全困局的双刃剑
学习·安全
Drawing stars7 小时前
JAVA后端 前端 大模型应用 学习路线
java·前端·学习
崇山峻岭之间8 小时前
Matlab学习记录33
开发语言·学习·matlab
科技林总8 小时前
【系统分析师】3.5 多处理机系统
学习
芯思路10 小时前
STM32开发学习笔记之三【按键】
笔记·stm32·学习
charlie11451419110 小时前
从 0 开始的机器学习——NumPy 线性代数部分
开发语言·人工智能·学习·线性代数·算法·机器学习·numpy
咚咚王者10 小时前
人工智能之核心基础 机器学习 第十二章 半监督学习
人工智能·学习·机器学习
袁气满满~_~11 小时前
Python数据分析学习
开发语言·笔记·python·学习
pumpkin8451412 小时前
Go 学习全景引子:理解设计理念与工程思路
python·学习·golang
week_泽13 小时前
第5课:短期记忆与长期记忆原理 - 学习笔记_5
java·笔记·学习·ai agent