1,什么叫单向循环链表。单向循环链表是指在单链表的基础上,表的最后一个元素指向链表头结点,不再是为空。

c语言实现--单向循环链表操作

2,由图可知,单向循环链表的判断条件不再是表为空了,而变成了是否到表头。

3,链表的结点表示

1 struct LNode
2 {
3     int data;
4     struct LNode * next;
5 };
6 typedef struct LNode * linklist

4,单向循环链表的操作集合,仍是defs.h里的操作集合,这里就不给出了。

5,单循环链表的初始化操作。示意图

             c语言实现--单向循环链表操作

实现:

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 }
DestroyList.c

相关文章: