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

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

相关推荐
LouSean2 分钟前
Unity按钮事件冒泡
经验分享·笔记·学习·unity·游戏引擎
pq113_627 分钟前
OrangePi Zero 3学习笔记(Android篇)4 - eudev编译(获取libudev.so)
android·笔记·学习
Chef_Chen2 小时前
R语言学习--Day01--数据清洗初了解andR的经典筛选语法
学习
keepDXRcuriosity2 小时前
深入探索快速排序算法:原理与 C 语言实现
c语言·算法·排序算法
zchao94562 小时前
关于ubuntu下交叉编译arrch64下的gtsam报错问题,boost中boost_regex.so中连接libicui18n.so.55报错的问题
学习
龙湾开发2 小时前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 05.纹理贴图
c++·笔记·学习·3d·图形渲染·贴图
hardStudy_h2 小时前
Linux C语言线程编程入门笔记
linux·c语言·嵌入式实时数据库
世事如云有卷舒3 小时前
u-boot学习笔记(三)
笔记·学习
5649833 小时前
爬虫学习————开始
爬虫·学习
@老蝴3 小时前
C语言—指针2
c语言·开发语言