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

【数据结构与算法】链表超全分类!从结构入门到双向链表初始化实现
在这里插入图片描述
🔥小龙报:个人主页
🎬作者简介: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

Flutter 组件 cleany 适配鸿蒙 HarmonyOS 实战:自动化清理矩阵,构建复杂应用的状态闭环与资源防腐架构

Flutter 组件 cleany 适配鸿蒙 HarmonyOS 实战:自动化清理矩阵,构建复杂应用的状态闭环与资源防腐架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 cleany 适配鸿蒙 HarmonyOS 实战:自动化清理矩阵,构建复杂应用的状态闭环与资源防腐架构 前言 在鸿蒙(OpenHarmony)生态迈向多任务并行、长周期驻留及高频账户流转的全场景办公与生活背景下,如何确保应用在退出登录、环境切换或异常恢复时能够“不留痕迹”地销毁脏数据,已成为衡量应用健壮性的核心指标。在鸿蒙设备这类强调分布式沙箱隔离与严苛内存占用(Resident Set Size)管控的环境下,如果应用缺乏统一的资源清理机制,由于由于散落在各处的 Stream 监听、本地缓存及内存单例,极易由于由于状态残留导致不同用户间的数据越权或 UI 状态的逻辑死锁。 我们需要一种能够集中注册清理任务、支持并发异步销毁且具备原子性执行保障的状态复位框架。 cleany 为 Flutter 开发者引入了极其暴力且高效的“全域清算”范式。它通过中心化的管理器(Manager),允许各个业务模块在初始化时注册其对应的资源回收钩子。在适

By Ne0inhk
Flutter 组件 reaxdb_dart 适配鸿蒙 HarmonyOS 实战:响应式 NoSQL 数据库,构建高性能本地持久化与分布式状态同步架构

Flutter 组件 reaxdb_dart 适配鸿蒙 HarmonyOS 实战:响应式 NoSQL 数据库,构建高性能本地持久化与分布式状态同步架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 reaxdb_dart 适配鸿蒙 HarmonyOS 实战:响应式 NoSQL 数据库,构建高性能本地持久化与分布式状态同步架构 前言 在鸿蒙(OpenHarmony)生态迈向全场景协同、涉及极高频率的端侧数据持久化、实时 UI 数据绑定及分布式节点状态同步的背景下,如何实现一套既能保障数据“强一致性”、又能提供毫秒级检索性能且具备天然“响应式(Reactive)”特性的本地存储引擎,已成为决定应用交互流畅度与底层架构灵活性。在鸿蒙设备这类强调 AOT 极致效能与沙箱存储严格隔离的环境下,如果应用依然依赖臃肿的传统 SQL 或非响应式的 Key-Value,由于由于由于由于 UI 与数据库间的频繁轮询,极易由于由于“数据 IO 阻塞”导致鸿蒙应用在高并发读写时发生明显的帧率抖动。 我们需要一种能够解耦存储逻辑、支持 Stream 级变更监听且具备高性能二进制序列化架构的嵌入式

By Ne0inhk
无线蜂窝网络:编织世界的无形之网

无线蜂窝网络:编织世界的无形之网

🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:无线通信技术,本专栏介绍无线通信相关技术 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 无线蜂窝网络:编织世界的无形之网 无线蜂窝网络是世界通信的基石,它通过“蜂窝”般的小区划分,让几十亿人能够随时随地无线通话、上网。我将从核心原理、工作流程、代际演进以及与Wi-Fi的对比等几个维度,为你展开这幅无线世界的全景图。 一、 什么是蜂窝网络?—— 从一个比喻开始 想象一下,你要在一个巨大的操场上举办一场派对,需要让所有人都能听到音乐。 * 方案A(大广播): 在操场中央放一个超级大喇叭。 * 问题: 离得近的人震耳欲聋,离得远的人听不清;而且大家不能同时点歌(信道有限)。 * 方案B(蜂窝派对): 把操场分成许多小格子,每个格子里放一个小音箱。每个音箱只负责覆盖自己的小格子。 * 好处: 每个人都能听清;相邻的格子可以播放不同的音乐(

By Ne0inhk
LazyLLM 多 Agent 应用全流程实践:从源码部署到可视化 Web 调试的低代码方案

LazyLLM 多 Agent 应用全流程实践:从源码部署到可视化 Web 调试的低代码方案

LazyLLM 多 Agent 应用全流程实践:从源码部署到可视化 Web 调试的低代码方案 前言:为什么选择 LazyLLM 构建多 Agent 大模型应用? LazyLLM 作为低代码构建多 Agent 大模型应用的开发工具,可大幅降低大模型应用的开发与部署门槛。本文聚焦其在豆包模型的落地实践,将从源码部署豆包文本模型的完整配置步骤入手,延伸至官方 WebModule 启动可视化 Web 界面的实操流程,并配套精准性、简洁度等多维度的部署测试说明,为开发者提供可直接对照的实操指南,助力高效完成豆包模型在 LazyLLM 框架下的部署与验证。 LazyLLM 整体架构解析:三层联动的多 Agent 运行体系 LazyLLM 的架构分为三层级递进结构,各层级分工明确且联动协同,实现从应用开发到落地执行的全流程覆盖:上层(LazyPlatform AI 大模型应用开发平台):核心含应用编排平台以可视化编排、发布、回流、调优的闭环完成应用构建迭代与平台管理模块通过租户、权限管理支撑多用户运维,是开发者的高效开发管理入口中层(

By Ne0inhk