typedef struct DNode{
int data;
struct DNode *prior,*next;
}DNode, *DLinklist;
//初始化双链表(带头结点)
bool InitDLinkList(DLinklist &L){
L = (DNode *)malloc(sizeof(DNode)); //分配一个头结点
if(L==NULL) //内存不足,分配失败
return false;
L->prior = NULL; //初始化
L->next = NULL; //初始化
return true;
}
//判断双链表是否为空
bool Empty(DLinklist L){
if(L->next == NULL)
return true;
else
return false;
}
//在p结点之后插入s结点
bool InsertNextDNode(DNode *p, DNode *s){
if(p==NULL || s==NULL)
return false;
s->next = p->next;
if(p->next != NULL) //如果p结点有后续结点
p->next-prior = s;
s->prior = p;
p->next = s;
return true;
}
//删除p的后续结点q
bool DeleteNextDNode(DNode *p){
if(p==NULL)
return false;
DNode *q = p->next;
if(q==NULL)
return false;
p->next = q->next;
if(q->next != NULL)
q->next->prior = p;
free(q);
return true;
}
//销毁双链表
void DestoryList(DLinklist &L){
while(L->next != NULL) //循环释放各个数据结点
DeleteNextDNode(L);
free(L); //释放头结点
L=NULL; //头指针指向NULL
}
数据结构:双链表的基本操作(带头结点)
最新推荐文章于 2023-05-31 11:03:20 发布