首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

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 }
复制代码
7,DestroyList操作
复制代码
1 #include"defs.h"
2
3 void DestroyList(linklist *L)
4 {
5     ClearList(*L);
6     free(*L);
7     *L = NULL;
8 }
复制代码
8,ListEmpty操作
复制代码
1 #include"defs.h"
2
3 int ListEmpty(linklist L)
4 {
5     if (L->next == L && L->prior == L) //两个条件均要有
6         return 0;
7     else
8         return 1;
9 }
复制代码
9,ListLength操作
复制代码
1 #include"defs.h"
2
3 int ListLength(linklist L)
4 {
5     linklist p = L->next;
6     int j = 0;
7     
8     while (p != L)
9     {
10         ++j;
11         p = p->next;
12     }
13     return j;
14 }
复制代码
10,GetElem操作
复制代码
1 #include"defs.h"
2
3 int GetElem(linklist L, int i, int *e)
4 {
5      linklist p = L;
6      int j = 0;
7      if (i<1 || i>ListLength(L))
8          exit(0);
9      
10      while (j<i)   //找到第i个结点
11      {
12           ++j;
13           p = p->next;
14      }
15      *e = p->data;
16 }
复制代码
11,LocateElem操作, 没有找到返回-1
复制代码
1 #include"defs.h"
2
3 int LocateElem(linklist L, int e)
4 {
5     linklist p = L->next;
6     int j = 0;
7
8     while (p != L)
9     {
10         ++j;
11         if (p->data == e)
12              return j;
13     }
14     return -1;  
15 }
复制代码
12,PriorElem操作
复制代码
1 #include"defs.h"
2
3 int PriorElem(linklist L, int cur_e, int *pri_e)
4 {
5     linklist p = L->next->next;  //p指向第二个元素
6  
7    while (p != L)
8     {
9           if (p->data == cur_e)
10           {
11                 *pri_e = p->prior->data;
12                 return 0;
13           }
14     }
15     return 0;
16 }
复制代码
13,NextElem操作
复制代码
1 #include"defs.h"
2
3 int NextElem(linklist L, int cur_e, int *nex_e)
4 {
5     linklist p = L->next->next;
6     
7      while (p != L)
8      {
9              if (p->prior->data == cur_e)
10              {
11                       *nex_e = p->data;
12                        return 0;
13              }
14      }
15      return 0;
16 }
继承事业,薪火相传
返回列表