【数据结构】- 几个步骤教你认识并实现一个链表之带头(哨兵位)双向循环链表(上)

news2025/2/27 1:23:37

文章目录

  • 前言
  • 🌟一、带头双向循环链表
  • 🌟二、带头双向循环链表结构图:
  • 🌟三、带头双向循环链表代码实现:
    • 🌏3.1头插:
      • 💫3.1.1头插流程图
      • 💫3.1.2 相较于无头单向非循环链表:
    • 🌏3.2尾插
      • 💫3.2.1尾插流程图
    • 🌏3.3全部代码:
  • 😽总结


前言

👧个人主页:@小沈熬夜秃头中୧⍤⃝❅
😚小编介绍:欢迎来到我的乱七八糟小星球🌝
📋专栏:数据结构
🔑本章内容:[数据结构]—链表之带头双向循环链表
送给各位💌:就算星星碎了溢出来的光也会很好看.
欢迎 评论📝 +点赞👍 +收藏😽 +关注💞哦~


提示:以下是本篇文章正文内容,下面案例可供参考

🌟一、带头双向循环链表

==带头双向循环链表:==结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了。
链表有多种结构详细请看:
【数据结构】- 链表之单链表(上)

🌟二、带头双向循环链表结构图:

在这里插入图片描述
请添加图片描述

🌟三、带头双向循环链表代码实现:

🌏3.1头插:

void LTPushFornt(LTNode* phead, LTDataType x)
{
	LTNode* newnode = BuyLTNode(x);
	LTNode* cur = phead->next;
	newnode->prev = phead;
	phead->next = newnode;
	newnode->next = cur;
	cur->prev = newnode;
}

💫3.1.1头插流程图

第一种写法如上代码:

在这里插入图片描述

第二种写法如下图:

请添加图片描述

最后最重要的一点:

请添加图片描述

💫3.1.2 相较于无头单向非循环链表:

在这里插入图片描述
请添加图片描述

🌏3.2尾插

void LTPushBack(LTNode* phead, LTDataType x)
{
	assert(phead);
	LTNode* newnode = BuyLTNode(x);
	LTNode* tail = phead->prev;
	tail->next = newnode;
	newnode->prev = tail;
	newnode->next = phead;
	phead->prev = newnode;
}

💫3.2.1尾插流程图

请添加图片描述
请添加图片描述

🌏3.3全部代码:

//List.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

typedef int LTDataType;
typedef struct ListNode
{
	struct ListNode* next;
	struct ListNode* prev;
	LTDataType data;
}LTNode;

LTNode* LTInit();
void LTPushFront(LTNode* phead, LTDataType x);
void LTPushBack(LTNode* phead, LTDataType x);
void LTNodePrint(LTNode* phead);


//List.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"List.h"
LTNode* BuyLTNode(LTDataType x)
{
	LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));
	if (newnode == NULL)
	{
		perror("malloc fail");
	}
	newnode->data = x;
	newnode->next = NULL;
	newnode->prev = NULL;
}
LTNode* LTInit()
{
	LTNode* phead = BuyLTNode(-1);
	phead->next = phead;
	phead->prev = phead;
	return phead;
}

void LTNodePrint(LTNode* phead)
{
	assert(phead);
	LTNode* cur = phead->next;
	printf("哨兵位<==>");
	while (cur != phead)
	{
		printf("%d<==>", cur->data);
		cur = cur->next;
	}
	printf("\n");
}

void LTPushFront(LTNode* phead, LTDataType x)
{
	LTNode* newnode = BuyLTNode(x);
	LTNode* cur = phead->next;
	newnode->prev = phead;
	phead->next = newnode;
	newnode->next = cur;
	cur->prev = newnode;
}

void LTPushBack(LTNode* phead, LTDataType x)
{
	assert(phead);
	LTNode* newnode = BuyLTNode(x);
	LTNode* tail = phead->prev;
	tail->next = newnode;
	newnode->prev = tail;
	newnode->next = phead;
	phead->prev = newnode;
}


//Test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"List.h"
void TestList()
{
	LTNode* plist = LTInit();
	LTPushBack(plist, 1);
	LTPushBack(plist, 2);
	LTPushBack(plist, 3);
	LTPushBack(plist, 4);
	LTNodePrint(plist);
}
int main()
{
	TestList();
	return 0;
}

😽总结

请添加图片描述
😽Ending,今天的链表之带头双向循环链表(上)的内容就到此结束啦~,如果后续想了解更多,就请关注我吧,一键三连哦 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/520648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高边输出和低边输出

文章目录 高边和低边高边驱动&#xff08;HSD&#xff0c;High Side Drive&#xff09;和低边驱动&#xff08;LSD&#xff0c;Low Side Drive&#xff09;应用示例举例高/低边驱动芯片 按照开关闭合时开关输出的电压高低&#xff0c;可以分为高边输出和低边输出开关。 高边和低…

ubuntu 20.04 通过 sshfs 共享文件夹到 windows

功能需求 最近需要 让 ubuntu 共享文件夹&#xff0c;windows 来映射成磁盘或者共享目录的方式使用 windows 的文件夹可以通过 VMware Workstation Pro 虚拟机【共享文件夹】设置&#xff0c;轻松的实现 文件共享&#xff0c;不过这里的共享是 单向的&#xff0c;也就是 文件夹…

Windows服务器加固

文章目录 一、 账户安全要求二、 权限安全要求三、 通用安全管理四、 日志审计安全五、网络协议安全 一、 账户安全要求 1、 账户错误登录锁定 次数&#xff08;8&#xff09; 开始->运行->输入“gpedit.msc”打开本地组策略编辑器&#xff0c;浏览 路径&#xff1a;“…

快来学习SQL数据库,MySQL的保姆级安装,MySQL的入门使用以及DBeaver软件的安装

SQL数据库 无处不在的SQL&#xff0c;不管是何种开发语言&#xff0c;亦或是何种开发方向&#xff0c;SQL都是开发人员无法绕开的话题。除了一门趁手的编程语言外&#xff0c;SQL语言也是开发人员人人必备的开发技能。 数据库有三个层级&#xff1a;库——表——数据 市面上的…

路径规划算法:基于斑点鬣狗优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于斑点鬣狗优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于斑点鬣狗优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

第五十八章 Unity 发布PC平台

本章节我们介绍一些如何打包游戏到PC平台&#xff0c;这里重点介绍如何制作Windows操作系统下的游戏包。首先&#xff0c;我们创建一个“PcDemo”工程&#xff0c;然后简单布置一下场景内容&#xff0c;如下 想要打包发布Unity项目&#xff0c;我们可以在菜单栏选择“File”→ …

PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用

PHP 面向对象&#xff0c;构造函数&#xff0c;析构函数&#xff0c;继承&#xff0c;方法的重写&#xff0c;接口抽象类&#xff0c;static&#xff0c;final&#xff0c;this&#xff0c;parent&#xff0c;self的异同和作用 PHP 面向对象1.构造函数2.析构函数3.继承4.方法重…

520到了还有人不会表白吗——Python GUI实现爆火抖音的弹窗表白

文章目录 源码1.正常版本2.BT(变态)版本 代码实现(正常版本)结束语 最近抖音爆火的窗口表白 心中的女孩如果收到了&#xff0c;肯定会看着满屏幕的窗口感动不止&#xff0c;对你倾心 本文是正常版本的源码&#xff0c;BT版本的源码链接待审核 源码 1.正常版本 点击喜欢或者不喜…

【Linux】KMP算法

目录 主题 橙色 主题 好了&#xff0c;解释清楚这个表是什么之后&#xff0c;我们再来看如何使用这个表来加速字符串的查找&#xff0c;以及这样用的道理是什么。如图 1.12 所示&#xff0c;要在主字符串"ababababca"中查找模式字符串"abababca"。 如果在…

源码解读guava cache get方法的秘密

guava cache是谷歌开源的一种本地缓存&#xff0c;实现原理类似于ConcurrentHashMap&#xff0c;使用segments分段锁&#xff0c;保证线程安全&#xff0c;支持高并发场景。同时支持多种类型的缓存清理策略&#xff0c;包括基于容量的清理、基于时间的清理、基于引用的清理等。…

嵌入式系统中常见的摄像头接口

MIPI CSI&#xff1a;MIPI CSI&#xff08;Mobile Industry Processor Interface Camera Serial Interface&#xff09;是一种专用于手机和移动媒体设备的摄像头接口标准。它具有高速传输、低功耗和可靠性等优点&#xff0c;已经成为现代嵌入式摄像头的主要接口之一。 USB cam…

day31_JDBC

今日内容 零、 复习昨日 一、数据库连接池 二、反射 三、封装DBUtil 零、 复习昨日 三表关联 create table teacher ( tid int, tname varchar(10) ) insert into teacher values(1,老邱); insert into teacher values(2,老王);-- 三表关联 -- 查询学生以及班级信息 select * f…

FPGA实现Cordic算法求解arctan和sqr(x*2 + y* 2)

一. 简介 由于在项目中需要使用的MPU6050&#xff0c;进行姿态解算&#xff0c;计算中设计到**arctan 和 sqr(x2 y 2),**这两部分的计算&#xff0c;在了解了一番之后&#xff0c;发现Cordic算法可以很方便的一次性求出这两个这两部分的计算。另外也可以一次性求出sin和cos的…

MHA高可用配置及故障切换

单组mha 多组mmm mha &#xff08;master high availability&#xff09; mha解决mysql单点的问题 mysql故障切换的过程中最大程度上保证数据的一致性&#xff0c;一达到真正意义上的高可用 mha组成 mha node&#xff08;数据节点&#xff09; mha node 运行在每个mysql服…

数据库 SERVERLESS 与 RDS 产品逐步淘汰 和 云数据库的价值

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

HTML + CSS + JavaScript 实现注册页面信息验证 详细教程(表单验证)

>>> 本文介绍使用HTML CSS JavaScript 实现注册页面信息验证的详细方法。完整代码见文章末尾。 要求 创建一个注册页面&#xff0c;如下图。 然后再对注册信息进行判断&#xff0c;判断其是否符合要求。&#xff08;如&#xff1a;密码6-12位字符&#xff0c;不能…

Unity通过深度图做有交互效果的水泡沫

通过深度图做交互水泡沫 大家好&#xff0c;我是阿赵。 这里做一个有交互效果的水面&#xff0c;物体浸入水面时&#xff0c;会根据物体的形状&#xff0c;有一圈水泡沫的效果&#xff0c;并且水泡沫的形状会跟随这物体变化。由于想做得稍微完整一点&#xff0c;又不想其他效果…

ipad可以用别的品牌的手写笔吗?便宜的ipad电容笔

而对于那些把ipad当做学习工具的人而言&#xff0c;苹果Pencil就成了必备品。但因为苹果Pencil太贵了&#xff0c;学生们买不起。因此&#xff0c;最好的选择还是平替电容笔。作为一个ipad的忠实用户&#xff0c;同时也是一个数字热爱着&#xff0c;这两年来&#xff0c;我一直…

谈谈ChatGPT对中国教育的影响与挑战,我们该怎么办?

ChatGPT对中国教育的影响 1. 个性化教学 通过分析学生的学习习惯和问题&#xff0c;AI可以为每个学生提供个性化的学习路径。例如&#xff0c;如果一个学生在数学上表现出困难&#xff0c;AI可以提供更多的数学练习和教学资源。 2. 在线教育 AI可以作为在线课程的一部分提供帮助…

verilog手撕代码5——计数器(置位、加减、环形、扭环形、格雷码计数器实现)

文章目录 前言一、二进制计数器&#xff08;n位 2^n状态&#xff09;1.1 可置位计数器1.2 加减计数器 二、环形计数器&#xff08;n位 n状态&#xff09;2.1 移位寄存器首尾相连构成环形计数器 三、扭环形计数器/Johnson计数器&#xff08;n位 2*n状态&#xff09;3.1 移位寄存…