双向循环链表的操作与实现

本文探讨了双向循环链表的概念,它在普通单向链表的基础上增加了双指针域和循环功能。通过分析`double_loop_link.h`、`double_loop_link.c`和`main.c`文件,我们将深入理解如何创建、插入、删除节点以及遍历这种数据结构。
摘要由CSDN通过智能技术生成

双向循环链表=普通单向链表+双指针域+循环功能;
double_loop_link.h

#ifndef _DOUBLE_LOOP_LINK
#define _DOUBLE_LOOP_LINK

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define DLOOP_ERR (-1)
#define DLOOP_SUCCESS 0
#define DATA_TYPE_IS_CHAR

#if defined DATA_TYPE_IS_CHAR
typedef char DataType;
#elif defined DATA_TYPE_IS_INT
typedef int DataType;
#elif defined DATA_TYPE_IS_FLOAT
typedef float DataType;
#endif

typedef struct double_loop_link_node{
   
    DataType data;
    struct double_loop_link_node *prev;
    struct double_loop_link_node *next;
}*PDLoopNode, DLoopNode;
typedef struct double_loop_link{
   
    int length;
    PDLoopNode head;
}*PDLoopLink, DLoopLink;

/* 创建一个空的双向循环链表 */
PDLoopLink CreateDLoopLink();
/* 向一个双循环链表插入数据结点 */
int InsertIntoDLoopLink(PDLoopLink head, const DataType data, const int index);
/* 从一个双向循环链表删除一个元素 */
int DeleteFromDLoopLink(PDLoopLink head, const int index);
/* 查找一个元素在双循环链表中首次出现的位置 */
int SearchInDLoopLink(PDLoopLink head, const DataType data);
/* 返回双循环链表中第index个元素 */
DataType GetElementByIndex(PDLoopLink head, const int index);
/* 获取双循环链表的长度 */
int GetDLoopLinkLength(PDLoopLink head);
/* 判断一个双循环链表是否为空 */
int DLoopLinkIsEmpty(PDLoopLink head);
/* 遍历一个双向循环链表中的元素 */
void DisplayDLoopLink(PDLoopLink head);
/* 销毁一个双向循环链表 */
void DestroyDLoopLink(PDLoopLink head);


#endif

double_loop_link.c

#include "double_loop_link.h"

PDLoopLink CreateDLoopLink()
{
   
    PDLoopLink head = (PDLoopLink)malloc(sizeof(DLoopLink));
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

存墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值