双链表的创建
#define NULL 0
#include<stdio.h>
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; //头结点的prior指针永远指向NULL
L->next = NULL; //头结点之后暂时无结点
return true;
}
//判断双链表是否为空
bool Empty(DLinkList &L){
if(L->next == NULL)
return true;
else
return false;
}
void testDLinkList(){
DLinkList L; //初始化双链表
InitDLinkList(L);
}
双链表指定结点插入 删除
//在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结点的后继结点
bool DeleteNextDNode(DNode *p){
if(p==NULL)
return false;
DNode *q = p->next; //q指向p的后继结点
if(q==NULL)
return false;
p->next = q->next;
if(q->next != NULL) //q结点不是最后一个结点
q->next->prior = p;
free(q);
return true;
}
双链表的删除
//双链表删除
void DestroyList(DLinkList &L){
//循环释放各个结点
while (L->next != NULL)
DeleteNextDNode(L);
free(L); //最后释放头结点
L=NULL;
}