分享

C语言实现

 守常_1 2018-05-07

1,我们研究数据结构的操作,第一要弄懂它的结构体表示(也就是结构体特点)、第二要清楚它的初始化和撤销过程。对于静态链表首先分析它的特点:一是采用静态存储方式,二是没有指针。静态链表就是不用指针来表示链式关系的一种巧妙实现。

2,静态链表的结构体定义

复制代码
1 #define MAX 100
2 
3 typedef struct
4 {
5     int data;   //数据域的类型可以是任意的基类型,包括数组
6     int cur;
7 }component, slinklist[MAX]
复制代码

3,静态链表的初始化示意图

4,静态链表的操作集合,与单链表一致,均在头文件defs.h中。此头文件在前面文章中已经写出。

5,初始化操作的实现

InitList.c

6,静态链表撤销操作的实现,原理就是将链表从第一个元素至最后一个元素插入到备用链表第一个元素前

DestroyList.c

7,静态链表清空操作和撤销操作是一致的。
8,判断空操作。ListEmpty.c

ListEmpty.c

9,求链表长度操作.

ListLength.c

10,取元素操作.

GetElem.c

11,查找元素操作实现.

LocateElem.c

12,求前驱操作实现.

PriorElem.c

13,求后继操作的实现

NextElem.c

14,Malloc函数实现

复制代码
 1 //因为没有指针,没有动态分配函数,所以要自己实现
 2 
 3 #include"defs.h"
 4 
 5 int Malloc(slinklist L)  //释放备用链表第一个结点
 6 {
 7     int i = L[0].cur; 
 8     if (i == 0)   //备用链表为空,无法分配,退出 
 9        exit(0);
10     L[0].cur = L[i].cur;  //备用链表头结点,指向备用链表第二个结点
11     return  i;
12 }
复制代码

15,Free函数实现

复制代码
1 #include"defs.h"
2 
3 void Free(slinklist L, int k) //将位置为k的空闲结点释放
4 {                                    //即插入到备用链表第一个结点前
5     L[k].cur = L[0].cur;
6     L[0].cur = k;
7 }
8 
9 //Malloc、Free均是对备用链表的操作
复制代码

16,静态链表插入操作实现

ListInsert.c

17,静态链表删除操作的实现

ListDelete.c

18,遍历静态链表操作实现

TravelList.c

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多