双链表笔记
双链表
初始化
//双链表的初始化
//定义双链表
typdef struct DNode{
ElemType 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;
retur true;
}
插入(后插)
//将s节点插入到p节点之后
bool InsertNextDNode(DNode *p,DNode *s){
//判断节点是否合理
if(p==NULL && s==NULL)
return false;
s->next=p->next;
if(p->next!=NULL) //要判断是否是最后一个节点
p->next->prior=s;
p->next=s;
s->piror=p;
return true;
}
删除
//删除p的后继节点q p->q
bool DeleteNextDNode(DNode *p){
//判断p合理性
if(p==NULL && p->next==NULL)
return fasle;
DNode *q=p->next; //q指向p的后继节点
p->next=q->next;
//若q的后继节点为为NULL,则不存在前驱节点
if(q->next!=NULL)
q->next->prior=p;
free(q); //释放q
return true;
}
销毁
void DestoryList(DLinkList &L){
//不断对头节点进行后继节点删除操作,删除操作见上
while(L->next!=NULL){
DeleteNextDNode(L);
}
free(L); //释放头节点
L=NULL; //头指针指向NULL
}