- 初始化(带头结点)
#include<stdio.h> #include<stdbool.h> #include<stdlib.h> typedef struct { int data; //数据域 struct DList* prior, * next; //前驱和后继指针 }DList; //初始化,带头结点 bool InitDList(DList* L) { L = (DList*)malloc(sizeof(DList)); //分配一个头结点 if (L == NULL) return false; L->prior = NULL; //头结点的prior永远指向NULL L->next = NULL; //头结点之后暂时还没有结点 return true; } int main() { DList L; InitDList(&L); return 0; }
- 判断双链表是否为空(带头结点)
bool Empty(DList* L) { if (L->next = NULL) return true; else return false; }
- 双链表的插入
//双链表的插入,在p结点后插入s结点 bool InsertNextDList(DList* p, DList* s) { if (p == NULL || s == NULL) return false; s->next = p->next; if (p->next != NULL) p->next->prior = s; s->prior = p; p->next = s; return true; }
- 双链表的删除和销毁
//删除p的后继结点q bool DeleteDList(DList* p) { if (p == NULL) return false; DList* q = p->next; //找到p的后继节点 if (q == NULL) return false; //p没有后继 p->next = q->next; if (q->next != NULL) //q结点不是最后一个结点 q->next->prior = p; free(q); //释放空间 return true; } //销毁双链表 void DestoryList(DList* L) { while (L->next != NULL) DeleteDList(L); //循环释放各个数据结点 free(L); //释放头结点 L = NULL; //头指针指向NULL }
- 总代码
#include<stdio.h> #include<stdbool.h> #include<stdlib.h> typedef struct DList { int data; //数据域 struct DList* prior, * next; //前驱和后继指针 }DList; //初始化,带头结点 bool InitDList(DList* L) { L = (DList*)malloc(sizeof(DList)); //分配一个头结点 if (L == NULL) return false; L->prior = NULL; //头结点的prior永远指向NULL L->next = NULL; //头结点之后暂时还没有结点 return true; } //undefined.判断双链表是否为空(带头结点) bool Empty(DList* L) { if (L->next = NULL) return true; else return false; } //双链表的插入,在p结点后插入s结点 bool InsertNextDList(DList* p, DList* s) { if (p == NULL || s == NULL) return false; s->next = p->next; if (p->next != NULL) p->next->prior = s; s->prior = p; p->next = s; return true; } //删除p的后继结点q bool DeleteDList(DList* p) { if (p == NULL) return false; DList* q = p->next; //找到p的后继节点 if (q == NULL) return false; //p没有后继 p->next = q->next; if (q->next != NULL) //q结点不是最后一个结点 q->next->prior = p; free(q); //释放空间 return true; } //销毁双链表 void DestoryList(DList* L) { while (L->next != NULL) DeleteDList(L); //循环释放各个数据结点 free(L); //释放头结点 L = NULL; //头指针指向NULL } int main() { DList L; InitDList(&L); return 0; }
双链表基本操作
最新推荐文章于 2024-09-03 10:45:49 发布