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

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

Linux:深入理解网络层

Linux:深入理解网络层

网络层在复杂的网络环境中确定一个合适的路径.传输到指定的网络中 一、网络层的理解 问题1:为什么要有网络层的概念呢?? ——>我们先来讲一个故事:       假设我在学校里被誉为数学大神,是因为我的数学有考满分的能力,但是这种形容只能说明我有很大概率能考满分,而不是说我一定能考满分!!         那我要怎么保证每次都考满分呢??假设我的三叔是学校的教导主任,当我发现这次考试因为粗心没考满分的时候,三叔就会公布此次考试无效,然后让教务处重新出一份试卷再考一次,多考几次那么基本可以保证满分了!!         而此时我是一个具备满分能力的执行者(前提),而三叔是一可以通过重考的决策帮助我百分百考满分的人,所以能力+策略可以完美地完成这件事         此时我就相当于是IP层(跑腿的能力),而三叔就相当于是TCP层(提供可靠性决策)。所以总的来说,用户需要的是一种可以将数据可靠地跨网络从A主机送到B主机的能力,而其中IP协议的本质工作就是提供一种能力,将数据跨网络从A主机送到B主机!!而TCP协议就是提供策略保证这个过程的可靠性。   问题2:数据是如何通

By Ne0inhk
文科生封神!Python+AI 零门槛变现:3 天造 App,指令即收入(附脉脉 AI 沙龙干货)

文科生封神!Python+AI 零门槛变现:3 天造 App,指令即收入(附脉脉 AI 沙龙干货)

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 文章目录: * 一、前言:打破“AI是理科生专属”的迷思 * 二、行业新趋势:为什么文科生学Python+AI更有优势? * 2.1 文科生 vs 理科生:AI时代的核心竞争力对比 * 2.2 核心变现逻辑:靠Python+AI,“指令即收入” * 三、Python+AI零基础学习路径(文科生专属版) * 3.1 学习路径流程图 * 3.2 分阶段学习核心内容(新颖且落地) * 阶段1:Python核心基础(7天)—— 只学“AI开发必备” * 阶段2:AI大模型交互(10天)

By Ne0inhk
【粉丝福利社】构建自主AI深入A2A协议的智能体开发

【粉丝福利社】构建自主AI深入A2A协议的智能体开发

💎【行业认证·权威头衔】 ✔ 华为云天团核心成员:特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯:ZEEKLOG博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋:横跨鸿蒙、云计算、AI等前沿领域的技术布道者 🏆【荣誉殿堂】 🎖 连续三年蝉联"华为云十佳博主"(2022-2024) 🎖 双冠加冕ZEEKLOG"年度博客之星TOP2"(2022&2023) 🎖 十余个技术社区年度杰出贡献奖得主 📚【知识宝库】 覆盖全栈技术矩阵: ◾ 编程语言:.NET/Java/Python/Go/Node… ◾ 移动生态:HarmonyOS/iOS/Android/小程序 ◾ 前沿领域:

By Ne0inhk
人工智能:循环神经网络(RNN)与序列数据处理实战

人工智能:循环神经网络(RNN)与序列数据处理实战

循环神经网络(RNN)与序列数据处理实战 1.1 本章学习目标与重点 💡 学习目标:掌握循环神经网络的核心原理、经典变体结构,以及在文本序列任务中的实战开发流程。 💡 学习重点:理解 RNN 的循环计算机制,学会使用 TensorFlow/Keras 搭建基础 RNN 与 LSTM 模型,完成文本分类任务。 1.2 循环神经网络核心原理 1.2.1 为什么需要 RNN 💡 传统的前馈神经网络(如 CNN、全连接网络)的输入和输出是相互独立的。它们无法处理序列数据的上下文关联特性。 序列数据在现实中十分常见,比如自然语言文本、语音信号、时间序列数据等。这些数据的核心特点是,当前时刻的信息和之前时刻的信息紧密相关。 循环神经网络通过引入隐藏状态,可以存储历史信息,从而有效捕捉序列数据的上下文依赖关系。 1.2.2 RNN

By Ne0inhk