//循环链表定义及各类操作
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int Elemtype;
//定义循环单链表节点类型
typedef struct CLinkList
{
Elemtype data; //数据域
struct CLinkList *next; //指针域
} CLinkList;
//初始化循环单链表
bool InitCLinkList(CLinkList *L){
L = (CLinkList *)malloc(sizeof(CLinkList));
if (L == NULL)
return false;
L->next = L; //头节点尾指针指向头节点
}
//判断循环单链表是否为空
bool EmptyCLinkList(CLinkList *L){
if (L->next == L)
return true;
else
return false;
}
//判断节点p是否为循环单链表的表尾节点
bool IsCLinkListTail(CLinkList *L, CLinkList *p){
if (p->next == L)
return true;
else
return false;
}
//定义循环双链表节点类型
typedef struct CDLinkList
{
Elemtype data; //数据域
struct CDLinkList *prior, *next; //指针域
} CDLinkList;
//初始化循环双链表
bool InitCDLinkList(CDLinkList *L){
L = (CDLinkList *)malloc(sizeof(CDLinkList));
if (L == NULL)
return false;
L->prior = L; //头节点尾头指针指向头节点
L->next = L; //头节点尾指针指向头节点
}
//判断循环双链表是否为空
bool EmptyCDLinkList(CDLinkList *L){
if (L->next == L)
return true;
else
return false;
}
//判断节点p是否为循环双链表的表尾节点
bool IsCDLinkListTail(CDLinkList *L, CDLinkList *p){
if (p->next == L)
return true;
else
return false;
}
//在p节点后插入s节点
bool InsertNextCDNode(CDLinkList *p, CDLinkList *s){
s->next = p->next;
p->next->prior = s;
s->prior = p;
p->next = s;
return true;
}
//删除p节点的后继节点q
bool DeleteNextCDNode(CDLinkList *p, CDLinkList *q){
p->next = q->next;
q->next->prior = q;
free(q);
return true;
}
【数据结构】循环链表定义及基本操作
最新推荐文章于 2025-03-03 14:54:27 发布