美文网首页
C语言实现静态链表

C语言实现静态链表

作者: obsession_me | 来源:发表于2018-05-16 12:11 被阅读0次

静态链表(单链表的一种形式)

有时,也可以借用一维数组来描述线性链表,我们称这种链表为静态链表

#define MAXSIZE 100
typedef struct{
    ElemType data; // 数据域
    int cur;       // 另一种形式的指针域
}component, SLinkList[MAXSIZE];

静态链表需要实现插入和删除操作的时候,需要用户自己实现mallocfree两个函数,因此,最好是用游标构成一个备用的链表。

#include <stdio.h>
#include <stdlib.h>

# define MAXSIZE 100
typedef int ElemType;
// 静态链表的定义
typedef struct{
    ElemType data;
    int cur;
}component, SLinkList[MAXSIZE];

// 使用 游标 链接出未使用的节点
void init_cur(SLinkList *L){
    for(int i=0;i<MAXSIZE-1;++i){
        (*L)[i].cur = i+1;
        // 我们应该要明白一点,传入的东西即是指向数组的指针的指针,因此,我们需要得到数组本身,对其进行取值。
        // *(L)[i].cur error; cause [] has higher priority than *
    }
    (*L)[MAXSIZE-1].cur=0;
}

int malloc_sq(SLinkList *L){
    int temp = (*L)[0].cur;  // 这个是L[0].cur我们通过对这个值来判断是否进入 满 的状态
    if (temp == 0){
        // 满,则返回0,即分配空间失败
    }else{
        (*L)[0].cur = (*L)[temp].cur;
    }
    printf("[allocate] %d\n", temp);
    return temp;
} 

void free_sq(SLinkList *L, int i){
    // free
    (*L)[i].cur = (*L)[0].cur;
    (*L)[0].cur = i;
    printf("[free] %d\n", i);
}

int main(){
    SLinkList sl;
    init_cur(&sl);
    for (int j=0; j<MAXSIZE; j++){
        printf("the cur of %d is:%d\n", j, sl[j].cur);
    }
    // 测试malloc
    for (int i=0; i<MAXSIZE; i++){
        int j = malloc_sq(&sl);
        if (j != 0){
            sl[j].data = 9699;
        }else{
            printf("the static linklist is full, in this state the value of j is:%d\n", j);
        }
    }
    free_sq(&sl, 20);
    malloc_sq(&sl);
    return 0;
}

相关文章

  • C语言实现静态链表

    静态链表(单链表的一种形式) 有时,也可以借用一维数组来描述线性链表,我们称这种链表为静态链表。 静态链表需要实现...

  • Java实现简单的链表-面向初学者

    很久之前用C语言实现过链表,现在已经太久没用C语言。就先用JAVA实现一个简单链表好了,还是使用最原始的C语言实现...

  • Redis 源码--链表。

    因为C语言是一个比较底层的语言,库内没有实现链表,于是Redis自己实现了链表。Redis的链表是一个双向链表。 ...

  • 25_静态单链表的实现

    关键词: 单链表的一个缺点、静态单链表设计思路、静态单链表的继承层次结构、静态单链表的实现思路、静态单链表的实现 ...

  • 单链表的C语言算法实现

    单链表的C语言算法实现 自己用C语言实现的单链表算法,有什么不正确的地方,请各位共同讨论与指正。

  • 20.数据结构-线性表-3静态链表

    1.静态链表“后来的面向对象语言,如Java、C#等,虽不使用指针,但因为启用了对象引用机制,从某种角度也间接实现...

  • 链表

    单链表 C实现 Java实现 双链表 C实现 Java实现

  • 动态链表与静态链表

    动态链表与静态链表 1. 静态链表 静态链表概述 从他的意义上讲,静态链表像是对没有指针的语言缺陷而产生这么一个补...

  • C++实现双向循环链表

    本次博文是关于利用C++模板的方式实现的双向循环链表以及双向循环链表的基本操作,在之前的博文C++语言实现双向链表...

  • 2018-03-19 静态链表

    用数组描述的链表叫做静态链表,这种描述方法叫做游标实现法。 (因为有些语言并没有指针,为了模拟动态链表,所以这种方...

网友评论

      本文标题:C语言实现静态链表

      本文链接:https://www.haomeiwen.com/subject/rhrpdftx.html