(C语言)双向链表

目录

链表的分类

双向链表的实现

1)定义链表

2)初始化双向链表

3)申请节点

4)尾插

5)头插

6)打印链表

7)尾删

8)头插

9)查找

10)指定位置删除

11)在指定位置后删除

12)销毁链表


链表的分类

根据链表的三个特点(带头/不带头,单向/双向,循环/不循环),可以将链表分为8种。常见的有两种:单链表(单向不带头不循环链表),双链表(双向带头循环链表)。是否带头指的是有没有头节点。链表(全网最详细)-CSDN博客。单链表已经写过了,此处我们将双链表。

双向链表的实现

1)定义链表

typedef int SLDateType;//定义双向链表
typedef struct ListNode
{SLDateType date;   //节点中的邮箱有效数据struct ListNode* next;  //保存下一个节点地址struct ListNode* prev;   //保存上一个节点的有效地址
}LN;

2)初始化双向链表

双链表的初始化,主要是创建头节点,即哨兵位。

//双链表的初始化
void List_start(LN** head)
{*head = (LN*)malloc(sizeof(LN));(*head)->date = -1;//给哨兵位一个数据,但是它其实是无效数据//注意因为是循环链表,所以当只有一个哨兵位的时候,要让它指向它自己;(*head)->next = (*head)->prev = (*head);
}

3)申请节点

//申请节点
LN* ListBuyNode(SLDateType x)
{LN* newnode = (LN*)malloc(sizeof(LN));newnode->date = x;//因为是双向循环链表,永远不会走到空,所以将新节点也指向其自己newnode->next = newnode->prev = newnode;return newnode;
}

4)尾插

注意:除了双向链表的初始化以及销毁要传二级指针,其他函数均采用一级指针,因为哨兵位在被定义后就不能再对他进行修改了。

//双向链表的尾插
void SLpushback(LN* head, SLDateType x)
{LN* newnode = ListBuyNode(x);//对头节点head,尾节点head->prev,新节点newnodenewnode->next = head;newnode->prev = head->prev;head->prev->next = newnode;head->prev = newnode;
}

5)头插

头插是指查到烧饼位的后面。

//双向链表的头插
void SLpushfront(LN* head, SLDateType x)
{LN* newnode = ListBuyNode(x);//对head newnode head->next进行修改newnode->next = head->next;newnode->prev = head;head->next->prev = newnode;head->next = newnode;
}

6)打印链表

//打印双向链表
void SLPrint(LN* head)
{LN* pcur = head->next;while (pcur != head){printf("%d ", pcur->date);pcur = pcur->next;}
}

7)尾删

//双链表尾删
void SLDelback(LN* head)
{//对head head->prev head->prev->prevLN* del = head->prev;head->prev = del->prev;del->prev->next = head;free(del);del = NULL;
}

8)头插

//双链表的头插
void SLDelfront(LN* head)
{//对head head->next head->next->next进行调整LN* del = head->next;head->next = del->next;del->next->prev = head;
}

9)查找

找双向链表中查找数据,并返回节点;

//双链表的查找
LN* SLFind(LN* head,SLDateType x)
{LN* pcur = head->next;while (pcur != head){if (pcur->date == x)return pcur;pcur = pcur->next;}return NULL;
}

10)指定位置删除

//指定位置删除
void SLDEL(LN* head, LN* pos)
{//删除pos节点//对pos->prev pos pos->next进行操作pos->prev->next = pos->next;pos->next->prev = pos->prev;free(pos);pos = NULL;
}

11)在指定位置后删除

//在指定位置后插入
void LInsert(LN* pos, SLDateType x)
{LN* newnode = ListBuyNode(x);//对pos  newnode  pos->nextnewnode->next = pos->next;newnode->prev = pos;pos->next->prev = newnode;pos->next = newnode;
}

12)销毁链表

//销毁链表
void LDestory(LN** head)
{//循环删除节点LN* pcur = (*head);while (pcur != *head){LN* next = pcur->next;free(pcur);pcur = next;}free(*head);*head = NULL;
}

相关新闻

linux部分rpm包总结描述

linux部分rpm包总结描述

acl-2.2.51-15.el7.x86_64 Commands for Manipulating POSIX(可移植操作系统接口 of unix) Access Control Lists.有getfacl和setfacl --exclude aic94xx-firmware-30-6.el7.noarch SCSI磁盘阵列驱动 --exlucde aide-0.15.1-13.el7.x86_64 入侵侦察环境 …

2026/7/17 2:16:08 阅读更多 →
C05S11-MySQL数据库索引

C05S11-MySQL数据库索引

一、索引 1. 索引概述 索引是一个排序的列表,在这个列表当中存储了索引的值和这个值对应数据所在的物理地址。使用索引之后,查询数据表时,不用全表扫描来定位数据所在行,而是通过索引直接找到该行数据对应的物理地址&#xff0c…

2026/7/16 17:57:59 阅读更多 →
拍立淘按图搜索API接口需要遵循一定的步骤和注意事项

拍立淘按图搜索API接口需要遵循一定的步骤和注意事项

使用拍立淘按图搜索API接口需要遵循一定的步骤和注意事项,以下是一个详细的指南: 一、准备工作 注册与登录: 在淘宝开放平台(或相关电商平台如1688)注册一个开发者账号。登录后,创建一个新的应用&#xff…

2026/7/12 18:17:38 阅读更多 →
附近有上门回收手表的吗?2026 长沙芙蓉区易奢福 24 小时随叫随到 - 肉松卷

附近有上门回收手表的吗?2026 长沙芙蓉区易奢福 24 小时随叫随到 - 肉松卷

2026 年长沙芙蓉区闲置名表变现需求旺盛,劳力士、欧米茄、卡地亚、万国、浪琴等腕表想要足不出户变现,上门回收成为主流选择。但本地流动回收商贩、小型门店套路层出不穷:线上虚高报价,上门后夸大表壳划痕、机芯轻…

2026/7/19 20:10:08 阅读更多 →
SpringBoot+Vue超市管理系统实战:前后端分离架构与业务设计

SpringBoot+Vue超市管理系统实战:前后端分离架构与业务设计

超市管理系统是Java开发者最常接触的实战项目类型之一,但很多初学者在搭建过程中会遇到各种问题:前后端分离架构理解不透彻、数据库设计不合理、权限控制混乱、业务逻辑耦合严重。这些问题不仅影响项目进度,更会在面试时暴露技术短板。本文将…

2026/7/19 20:10:08 阅读更多 →
Unity VR开发实战:从环境配置到性能优化的完整指南

Unity VR开发实战:从环境配置到性能优化的完整指南

1. 项目概述:从零到一,构建一个流畅的VR体验最近几年,VR项目在游戏、培训、文旅等领域的应用越来越广,但很多刚入行的开发者,甚至是有经验的Unity工程师,在初次接触VR开发时,都会遇到一个共同的…

2026/7/19 20:10:59 阅读更多 →
VC++ MFC报表打印预览完整实现:从GDI原理到工程实践

VC++ MFC报表打印预览完整实现:从GDI原理到工程实践

1. 项目概述:从零到一构建VC报表打印预览体系在桌面应用开发领域,报表的打印与预览功能是衡量一个软件专业度与用户体验的关键指标。尤其是在金融、医疗、工业控制等对数据呈现有严格要求的行业,一个稳定、高效且所见即所得的打印预览模块&am…

2026/7/19 20:10:59 阅读更多 →
PCA不是降维而是坐标系重铸:工程化落地的12个关键控制点

PCA不是降维而是坐标系重铸:工程化落地的12个关键控制点

1. 这不是数学课,是数据降维的实战指南:为什么你该真正搞懂PCA“Demystifying Principal Component Analysis”——这个标题里藏着一个被严重低估的真相:主成分分析(PCA)从来就不是统计学课本里那个抽象、冰冷、布满协…

2026/7/19 20:10:59 阅读更多 →
如何高效提取网页媒体资源:开源猫抓浏览器的终极使用秘籍

如何高效提取网页媒体资源:开源猫抓浏览器的终极使用秘籍

如何高效提取网页媒体资源:开源猫抓浏览器的终极使用秘籍 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾为无法保存网页上的精…

2026/7/19 20:10:59 阅读更多 →
鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析 前言 Emoji Idiom Guess 是一个基于鸿蒙 ArkTS 编写的单页互动应用,核心围绕 表情线索、答案输入、首字母提示和收藏关卡 展开。项目没有依赖复杂服务端,也没有把逻辑…

2026/7/19 0:00:03 阅读更多 →
Unity与Python本地通信:基于Flask的跨语言数据交换实战

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:04 阅读更多 →
科研课题设计全流程:从选题到成果落地的实战指南

科研课题设计全流程:从选题到成果落地的实战指南

1. 课题设计全流程解析:从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量,更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…

2026/7/19 0:00:04 阅读更多 →
鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析 前言 Emoji Idiom Guess 是一个基于鸿蒙 ArkTS 编写的单页互动应用,核心围绕 表情线索、答案输入、首字母提示和收藏关卡 展开。项目没有依赖复杂服务端,也没有把逻辑…

2026/7/19 0:00:03 阅读更多 →
Unity与Python本地通信:基于Flask的跨语言数据交换实战

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:04 阅读更多 →
科研课题设计全流程:从选题到成果落地的实战指南

科研课题设计全流程:从选题到成果落地的实战指南

1. 课题设计全流程解析:从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量,更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…

2026/7/19 0:00:04 阅读更多 →
ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

简介 saa是java的ai agent框架,本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理,不仅可以指导agent的开发,更可以改造框架,增加新特性 系列内容: 系列(一) 架构 完成 系列(三) 调用 I 工具 完成 II M…

2026/7/19 0:01:20 阅读更多 →
终极指南:如何用Steam-auto-crack实现Steam游戏自动破解

终极指南:如何用Steam-auto-crack实现Steam游戏自动破解

终极指南:如何用Steam-auto-crack实现Steam游戏自动破解 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack Steam-auto-crack是一款功能强大的Steam游戏自动破解工具&#xff…

2026/7/19 9:10:31 阅读更多 →
移动端游戏功耗测试实战:电流、功率、亮度和场景对比

移动端游戏功耗测试实战:电流、功率、亮度和场景对比

移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…

2026/7/19 19:29:48 阅读更多 →