1,什么叫单向循环链表。单向循环链表是指在单链表的基础上,表的最后一个元素指向链表头结点,不再是为空。
2,由图可知,单向循环链表的判断条件不再是表为空了,而变成了是否到表头。
3,链表的结点表示
1 struct LNode 2 { 3 int data; 4 struct LNode * next; 5 }; 6 typedef struct LNode * linklist
4,单向循环链表的操作集合,仍是defs.h里的操作集合,这里就不给出了。
5,单循环链表的初始化操作。示意图
实现:
1 #include"defs.h" 2 3 void InitList(linklist *L) //改变尾指针 4 { 5 *L = (linklist)malloc(sizeof(struct LNode)); //分配头结点 6 if (*L == NULL) //分配失败 7 exit(0); 8 (*L)->next = *L; //指针域指向它本身 9 }
6,清空操作最終图和初始化的结果是一样的。
1 #include"defs.h" 2 3 void ClearList(linklist *L) //改变尾指针 4 { 5 linklist p, q; 6 *L = (*L)->next; //先令尾指针指向头结点,不然释放最后一个结点时尾指针,无法指向头结点 7 p = (*L)->next; //p指向第一个结点 8 9 while (p != *L) //p未到表头时 10 { 11 q = p->next; 12 free(p); 13 p = q; 14 } 15 *L->next = *L; //头结点指针域指向其本身 16 }
7,DestroyList操作。撤销操作是在清空操作基础上,释放了头结点。
1 #include"defs.h" 2 3 void DestroyList(linklist *L) 4 { 5 ClearList(&L); 6 free(*L); //释放头结点 7 *L = NULL; 8 }