【数据结构与算法】链表超全分类!从结构入门到双向链表初始化实现

【数据结构与算法】链表超全分类!从结构入门到双向链表初始化实现
在这里插入图片描述
🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人等方向学习者
❄️个人专栏:《C语言》《【初阶】数据结构与算法》
永远相信美好的事情即将发生
在这里插入图片描述

文章目录


前言

链表是数据结构入门阶段的核心知识点,其结构灵活多变,可分为单向 / 双向、带头 / 不带头、循环 / 不循环等多种形式。本文先系统梳理链表的分类,帮助大家建立完整认知,再重点讲解带头双向循环链表这一高效实用的结构。从节点定义、哨兵位初始化到完整代码实现,一步步带你理解双向链表的设计思想,为后续增删改查等操作打下坚实基础。

一、链表的分类与说明

链表的结构非常多样,总共能组合出来8种

在这里插入图片描述

1.1 单向或者双向

双向链表分为前驱节点和后继节点:不仅能找到当前节点的下一个节点还可以找到上一个节点,使用起来也是很方便的。

在这里插入图片描述

1.2 带头或者不带头

带头链中的头节点,不存储任何有效数据,只用来站岗放哨,我们也称之为"哨兵位"

在之前的单链表学习中,我们有时候也会把第一个节点表述为头节点,其实这个称呼是不严谨的只是为了方便理解。
在这里插入图片描述

1.3 循环或者不循环

循环链表的尾节点不会指向空,而是指向了第一个节点

在这里插入图片描述

虽然有这么多的链表结构,但我们实际中最常用的其实还是两种:单链表(不带头单向不循环链表)和双向链表(带头双向循环链表) ,那我们一起来继续学习双向链表吧

二、双向链表

2.1 双向链表的定义

双向链表中由一个一个的节点组成,这里的节点有三个组成部分:
前驱指针: 指向前一个元素的指针
后驱指针: 指向后一个元素的指针
数值域: 存储元素

typedef structListNode{structListNode* prev;//前驱structListNode* next;//后继LDataType data;}ListNode;

2.2 双向链表中哨兵位头节点的初始化

双向链表中哨兵位的头节点是需要初始化一下的,数据随便给个不用的,然后前驱和后继指针都指向自己就可以了 ` voidLTInt(ListNode** pphead){ ListNode* ph =(ListNode*)malloc(sizeof(ListNode));if(ph == NULL){printf("开辟失败!\n");exit(-1);}*pphead = ph;(*pphead)->data =-1;//看个人习惯(*pphead)->next =*pphead;(*pphead)->prev =*pphead;}

三、代码展现

3.1 List.h

#include <stdio.h>#include <stdlib.h>#include <assert.h> typedef int LDataType; typedef structListNode{structListNode* prev;//前驱structListNode* next;//后继LDataType data;}ListNode;//初始化voidLTInt(ListNode** head);

3.2 List.c

#include "List.h"//初始化voidLTInt(ListNode** pphead){ ListNode* ph =(ListNode*)malloc(sizeof(ListNode));if(ph == NULL){printf("开辟失败!\n");exit(-1);}*pphead = ph;(*pphead)->data =-1;//看个人习惯(*pphead)->next =*pphead;(*pphead)->prev =*pphead;}

3.3 test.c

#include "List.h"intmain(){ ListNode* head;LTInt(&head);return0;}

总结与每日励志

✨本文详细介绍了链表的多种分类方式,并实现了带头双向循环链表的初始化逻辑,让大家清晰认识双向链表的结构优势与哨兵位的作用。数据结构的学习,重在理解结构本质与设计思路。✨ 一步一个脚印夯实基础,把每一个知识点学透、每一段代码写稳,坚持深耕下去,你的编程能力必将稳步提升,永远相信美好的事情即将发生。

在这里插入图片描述

Read more

OpenClaw 安装 + 接入飞书机器人完整教程

OpenClaw 安装 + 接入飞书机器人完整教程 OpenClaw 曾用名:ClawdBot → MoltBot → OpenClaw(同一软件,勿混淆) 适用系统:Windows 10/11 最后更新:2026年3月 一、什么是 OpenClaw? OpenClaw 是一款 2026 年爆火的开源个人 AI 助手,GitHub 星标已超过 10 万颗。 与普通 AI 聊天机器人的核心区别: * 真正的执行能力:不只回答问题,能实际操作你的电脑 * 24/7 全天候待命:睡觉时也能主动完成任务 * 完全开源免费:数据完全掌控在自己手中 * 支持国内平台:飞书、钉钉等均已支持接入 二、安装前准备:安装 Node.js 建议提前手动安装

By Ne0inhk
共绩算力 RTX 5090 极速部署 Stable Diffusion WebUI:新手也能秒开 AI 绘图工作站

共绩算力 RTX 5090 极速部署 Stable Diffusion WebUI:新手也能秒开 AI 绘图工作站

还在为本地硬件不足跑不动 AI 绘图模型发愁?想快速拥有高性价比的 Stable Diffusion 绘图环境?今天给大家带来共绩算力 RTX 5090 部署 Stable Diffusion WebUI(增强版)的详细教程,全程零兼容冲突,从云主机配置到生成第一张 AI 画作仅需 30 分钟,步骤清晰可复现,无论是设计爱好者还是 AI 新手都能轻松上手! 目录 一、为什么选择共绩算力部署 Stable Diffusion? 二、环境准备:精准配置云主机 2.1 创建云主机实例 1.2 登录云主机终端 二、完整部署流程 2.1 环境清理与依赖安装 2.2 下载与配置Stable Diffusion WebUI

By Ne0inhk
openclaw 对接完飞书群机器人配置踩坑记:消息不回、Gateway 断开问题排查

openclaw 对接完飞书群机器人配置踩坑记:消息不回、Gateway 断开问题排查

前言 用 OpenClaw 配飞书机器人,踩了两个坑:群消息不回、Gateway 总是断开。排查了好一阵子,总算搞定了,记录一下希望能帮到遇到同样问题的朋友。 发现问题 飞书消息不回复 在飞书群里 @ 了机器人,完全没反应。一开始以为是网络不好或者机器人没上线,但状态显示明明是连接着的,这就奇怪了。 Gateway 频繁断开 每次改完配置跑 openclaw gateway restart,或者根本什么都没干,Gateway 说断就断。再想启动就报错,必须跑一遍 openclaw doctor --fix 重新安装才能用。太影响使用了。 查看原因 飞书机器人 ID 搞错了 翻日志看到这么一句: receive events or callbacks through persistent connection only available in

By Ne0inhk
【VR音游】音符轨道系统开发实录与原理解析(OpenXR手势交互)

【VR音游】音符轨道系统开发实录与原理解析(OpenXR手势交互)

VR音游音符轨道系统开发实录与原理解析 在 VR 音游的开发过程中,音符轨道系统是最核心的交互与可视化部分。本文结合一次完整的开发实录,分享从核心原理与设计到VR内容构建的完整过程,帮助读者快速理解音符轨道系统的实现思路。 文章目录 * VR音游音符轨道系统开发实录与原理解析 * 一、实录结果 * 二、VR内容开发步骤 * 1. 准备音符与交互逻辑 * 2. 创建谱面 * 3. 绘制音轨 * 4. 预制件与音频替换 * 三、原理解析(音符轨道系统) * 1. 音符轨道(Note Track) * 2. 轨迹调节与偏移控制 * 3. 音符触摸激活 * 4. 谱面编辑工具(Editor 功能) * 四、总结与展望 * 1. 成果回顾:从零到一的核心突破 * 2. 技术总结:核心设计理念 * 3. 开发难点与问题反思 * 4. 优化策略与改进方向 * 5.

By Ne0inhk