1,双向链表相当于两个单向循环链表。
2,双向链表的结点定义。
1 struct DULNode 2 { 3 int data; 4 struct DULNode * prior; 5 struct DULNode * next; 6 }; 7 8 typedef struct DULNode * linklist;
3,单循环链表的操作都适用于双循环链表。
4,双循环链表的操作集合仍在头文件defs.h中。
5,InitList操作。双循环链表初始化操作示意图
1 #include"defs.h" 2 3 void InitList(linklist *L) //改变头指针 4 { 5 *L = (linklist)malloc(sizeof(struct DULNode)); 6 if (*L == NULL) 7 exit(0); 8 (*L)->next = *L; 9 (*L)->prior = *L; 10 }
6,ClearList操作.
1 #include"defs.h" 2 3 void ClearList(linklist L) 4 { 5 linklist p = L->next; //p指向链表第一个元素 6 7 while (p != L) 8 { 9 p = p->next; //p指向第二个元素 10 free(p->prior); 11 } 12 (*L)->next = *L; 13 (*L)->prior = *L; 14 }