双向循环链表的实现

news/2024/10/7 8:27:59
/********************************************************************************************************
*
*	file name:	Zqh_链表.c
* 	author	 :	keyword2024@163.com
* 	date	 :	2024/05/05
*	function :	链表的增删改查
*	note	 :	模板
*	
*  Copyright (c)  2023-2025   keyword2024@163.com    All right Reserved
* ******************************************************************************************************/#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>//指的是双向循环链表中的结点有效数据类型,用户可以根据需要进行修改
typedef int  DataType_t;//构造双向循环链表的结点,链表中所有结点的数据类型应该是相同的
typedef struct DoubleLinkedList
{DataType_t  		     data; //结点的数据域struct DoubleLinkedList	*prev; //直接前驱的指针域struct DoubleLinkedList	*next; //直接后继的指针域}DoubleLList_t;//创建一个空双向循环链表,空链表应该有一个头结点,对链表进行初始化
DoubleLList_t * DoubleCirLList_Create(void)
{//1.创建一个头结点并对头结点申请内存DoubleLList_t *Head = (DoubleLList_t *)calloc(1,sizeof(DoubleLList_t));if (NULL == Head){perror("Calloc memory for Head is Failed");exit(-1);}//2.对头结点进行初始化,头结点是不存储数据域,指针域指向自身即可,体现“循环”Head->prev = Head;Head->next = Head;//3.把头结点的地址返回即可return Head;
}//创建新的结点,并对新结点进行初始化(数据域 + 指针域)
DoubleLList_t * DoubleCirLList_NewNode(DataType_t data)
{//1.创建一个新结点并对新结点申请内存DoubleLList_t *New = (DoubleLList_t *)calloc(1,sizeof(DoubleLList_t));if (NULL == New){perror("Calloc memory for NewNode is Failed");return NULL;}//2.对新结点的数据域和指针域(2个)进行初始化,指针域指向结点自身,体现“循环”New->data = data;New->prev = New;New->next = New;return New;
}//双向循环链表头插
bool  insertCirDoublyLinList(DoubleLList_t*Head, DoubleLList_t*New)
{DoubleLList_t* Phead;Phead=Head->next;if (Head==Head->next){Phead = New;Head->next=Phead;return true;}Phead->prev->next=New;New->prev=Phead->prev;New->next=Phead;Phead->prev=New;Head->next=New;return true;
}//双向循环链表头删
bool deleteInCircularDoublyLinkedList(DoubleLList_t*Head)
{DoubleLList_t*Phead;Phead=Head->next;if (Head==Head->next){printf("链表为空\n");return true;}if (Phead->next!=Phead){Head->next=Phead->next;Phead->prev->next=Phead->next;Phead->next->prev=Phead->prev; //左值指向右值}else{Head->next=Head;}Phead->next=NULL;Phead->prev=NULL;free(Phead);return true;}

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

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

相关文章

工作感受月记(202405月)

2024年05月06号 新的一月工作天,旧事未清理,新事不停生。 今日工作事项: 1/ 来了一个新案例,apim stv1 升级到stv2的情况,客户需要noam同学来帮助建会议处理问题。 2/ 自己研究durable function的4001端口问题,证明确实是gRPC需要使用,用于 isolated process处理时候,进…

冲刺第三天

今天继续优化登录界面,寻找到了app的图标和想出了名字,

线程池核心原理浅析

由于系统资源是有限的,为了降低资源消耗,提高系统的性能和稳定性,引入了线程池对线程进行统一的管理和监控,本文将详细讲解线程池的使用、原理。前言 由于系统资源是有限的,为了降低资源消耗,提高系统的性能和稳定性,引入了线程池对线程进行统一的管理和监控,本文将详细…

ctf_web

ctfshow web13 访问题目链接一看是一道文件上传题,上传文件进行测试 上传php会显示 error suffix 因此推测会检测格式 当文件字数超出一定字数时,显示 error file zise 常规操作就是访问 .php.bak 、.phps 、.swp等文件,看看有没有源码泄露 这道题访问 upload.php.bak 成功获…

顺序表的实现

顺序表的实现/******************************************************************************************************** * * file name: Zqh_顺序表.c * author : keyword2024@163.com * date : 2024/05/05 * function : 顺序表的增删改查 * note : 模板 * * Copy…

Servlet相关知识

什么是servlet? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。 使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创…

雷达效果

相位阵雷达效果一个简单思路: 在一个扇形范围内,用多个射线检测来每tick判断点击查看代码 #pragma once#include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "Components/SphereComponent.h" #include "MyActor.generat…

【初中英语提分神器】中考高频词汇大全002-B/C开头单词高频,轻松掌握,考试无忧!速来围观!

PDF格式公众号回复关键字:ZKGCH002B开头单词高频 连词 1 but 然而 I like apples, but I dont like bananas. 我喜欢苹果,但我不喜欢香蕉。 2 because 因为 I didnt go to school today because I was sick. 我今天没去上学,因为我生病了 3 before 在……之前;先于;以前;在…