//双链表定义及各类操作
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int Elemtype;
//定义双链表节点类型
typedef struct DLinkList
{
Elemtype data; //数据域
struct DLinkList *prior, *next; //前驱指针,后继指针
} DLinkList;
//初始化双链表
bool InitDLinkList(DLinkList *L){
L = (DLinkList *)malloc(sizeof(DLinkList));
if (L == NULL)
return false; //内存不足,分配失败
L->prior = NULL;
L->next = NULL;
return true;
}
//判断双链表是否为空
bool EmptyDLinkList(DLinkList *L){
if (L->next == NULL)
return true;
else
return false;
}
//在p节点之后插入元素e
bool InsertNextDnode(DLinkList *p, Elemtype e){
DLinkList *s = (DLinkList *)malloc(sizeof(DLinkList)); //申请内存,创建节点s
if (p == NULL)
return false; //无效参数p
if (s == NULL)
return false; //内存不足,分配失败
s->data = e; //s节点存放元素e
s->next = p->next;
if (p->next != NULL) //如果p节点有后继节点
p->next->prior = s;
s->prior = p;
p->next = s;
return true;
}
//删除节点p的后继节点q
bool DeleteDnode(DLinkList *p){
if (p == NULL || p->next ==NULL)
return false; //无效参数p
DLinkList *q = p->next;
p->next = q->next;
if (q->next != NULL) //如果q节点有后继节点
q->next->prior = p;
free(q);
return true;
}
【数据结构】双链表定义及基本操作
最新推荐文章于 2022-07-28 19:17:57 发布