数据结构双链表
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct DNode{ 5 int data; 6 struct DNode *prior,*next; 7 }DNode,*DLinklist; 8 9 //初始化双链表 10 bool InitDLinkList(DLinklist &L){ 11 12 L = (DNode *)malloc(sizeof(DNode)); // 分配一个头结点 13 if(L==NULL) 14 return false; //内存不足,分配失败 15 L->prior = NULL; //头结点的prior永远指向NULL 16 L->next = NULL; //头结点之后暂时没有结点 17 18 return true; 19 } 20 21 //判断双链表是否为空 22 bool Empty(DLinklist L){ 23 if(L->next == NULL) 24 return true; 25 return false; 26 } 27 28 //插入操作 在p结点之后插入s结点 29 bool InsertNextDNode(DNode *p,DNode *s){ 30 31 if(p==NULL || s==NULL); //非法参数 32 return false; 33 s->next = p->next; 34 if(p->next != NULL) 35 p->next->prior=s; 36 s->prior=p; 37 p->next=s; 38 return true; 39 } 40 41 //删除操作 删除p结点的后继结点 42 bool DeleteNextDNode(DNode *p){ 43 if(p==NULL) 44 return false; 45 DNode *q = p->next; //找到p的后继结点 46 if(q==NULL) //p没有后继结点 47 return false; 48 p->next = q->next; 49 if(q->next!=NULL) 50 q->next->prior=p; //q结点不是最后一个结点 51 free(q); 52 return true; 53 } 54 55 //销毁双链表 56 void DestoryList(DLinklist &L){ 57 //循环释放各个数据结点 58 while(L->next != NULL) 59 DeleteNextDNode(L); 60 free(L); 61 L=NULL; 62 } 63 64 //遍历 一个while循环即可 65 66 int main(){ 67 return 0; 68 } 69
原文:https://www.cnblogs.com/hjg520/p/14983612.html