数据结构 数据结构——双链表 2021年8月22日 / //双链表typedef 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; //头节点的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节点的后继节点 bool DeleteNextDEnode(Dnode *p){ if(p==NULL) return false; Dnode *q = p->next; //找到p的后继节点q if(q==NULL) return false; //p没有后继 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}