【C语言-数据结构】单链表的定义

单链表的定义(实现)

比较顺序表和单链表的物理存储结构就能够清楚地发现二者的区别

用代码定义一个单链表

c 复制代码
typedef struct LNode{
    ElemType data;	//每个结点存放一个数据元素
    struct LNode* next; 	//指针指向下一个结点
}LNode, *LinkList;

//要表示一个单链表时,只需声明一个头指针L,指向单链表的第一个结点
LNode* L;	//➡️ 强调这是一个结点
LinkList L; //➡️ 强调这是一个单链表
//以上两种声明方式都可以,建议使用第二种,代码可读性更强

单链表的初始化

不带头节点的单链表

c 复制代码
typedef struct LNode{
    ElemType data;
    struct LNode* next; 
}LNode, *LinkList;

bool InitList(LinkList* L){	//初始化一个空的单链表
    *L = NULL;	//空表,暂时没有任何结点,防止脏数据
    return true;
}

int main(){
    LinkList L; //声明一个指向单链表的指针
    InitList(&L);	//初始化一个空表
    //...
    return 0;
}

带头节点的单链表

c 复制代码
typedef struct LNode{
    ElemType data;
    struct LNode* next; 
}LNode, *LinkList;

//初始化一个单链表(带头节点)
bool InitList(LinkList* L){
    *L = (LNode*)malloc(sizeof(LNode));
    if(*L == NULL)
        return false;
    (*L)->next = NULL;
    return true;
}

int main(){
    LinkList L; //声明一个指向单链表的指针
    if (InitList(&L)) {  // 初始化一个空表,传递指针的地址
        printf("单链表初始化成功\n");
    } else {
        printf("单链表初始化失败\n");
    }
    //...
    return 0;
}

总结

不带头结点,写代码更麻烦

对第一个数据结点和后续数据结点的处理需要用不同的代码逻辑

对空表和非空表的处理需要用不同的代码逻辑

带头结点,写代码更方便


本文主要参考《王道计算机考研 数据结构》课程视频

相关推荐
所愿ღ4 小时前
JavaWeb-Servlet基础
笔记·servlet
岑梓铭4 小时前
考研408《计算机组成原理》复习笔记,第五章(2)——CPU指令执行过程
笔记·考研·408·计算机组成原理·计组
No0d1es6 小时前
电子学会青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)
c语言·c++·算法·青少年编程·电子学会·五级
oe10198 小时前
读From GPT-2 to gpt-oss: Analyzing the Architectural Advances(续)
笔记·gpt·学习
大阳1238 小时前
线程(基本概念和相关命令)
开发语言·数据结构·经验分享·算法·线程·学习经验
FPGA10 小时前
探讨4B/5B编码、8B/10B编码区别以及FPGA实现
数据结构
秋难降10 小时前
线段树的深度解析(最长递增子序列类解题步骤)
数据结构·python·算法
Peter_Deng.11 小时前
Linux 下基于 TCP 的 C 语言客户端/服务器通信详解(三个示例逐步进阶)
服务器·c语言·网络
Include everything11 小时前
Rust学习笔记(三)|所有权机制 Ownership
笔记·学习·rust
livemetee13 小时前
Flink2.0学习笔记:Flink服务器搭建与flink作业提交
大数据·笔记·学习·flink