数据结构学习笔记-静态链表(C语言实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z498596750/article/details/79277638

       静态链表主要是为一些没有指针的高级开发语言而提供的。实现思路就是:创建一个数组,数组中的元素由两个属性组成,数据(data)、指针(cur)。指针指向下一个数组元素的下标。数组的第一个元素和最后一个元素不存放数据。数组之内除第一个数组元素,其余的数组空元素都被称为备用链表。数组的第一个元素的cur存放第一个备用链表的下标,数组的最后一个元素的cur存放第一个带有数据的数组元素的下标。在没有数据的数组中,最后一个数组元素的cur是0.

静态链表实现方法:

 init()方法:让数组中元素的cur分别指向下一个数组元素。最后一个数组中的元素的cur指向0

(因为是空链表)。

setData()方法:让数组中的第一个元素的cur存放第一个备用链表的下标,让数组中含有数据的

最后一个元素的cur存放0。

getBtcur()方法:返回第一个备用链表的下标,并让数组中第一个元素的cur存放下一个备用链

表的下标。

insertEle()方法:通过getBtcur()方法拿到备胎的下标,将数据存入该下标所代表的数组元

,定义一个变量用来存放数组最后一个元素的下标,循环,通过最后的这个元素的cur(也就是指针

)来找到要插入的地点的下标,将这个下标位置的数据元素的cur赋给备胎的cur,再把备胎的下标赋

扫描二维码关注公众号,回复: 5112403 查看本文章

给这个数据元素的cur。

freeNode()方法:将要删除的数组元素释放掉(就是将要删除的数组元素的cur指向数组第一个元

素的cur),变成备用链表,并让数组的第一个元素指向他。

deleteEle()方法:通过循环找到要删除的元素的前一个位置元素,让他直接指向要删除的元素的下

一个元素,并通过freeNode方法将要删除的元素变成备用链表。

#include <stdio.h>
#include <stdlib.h>
#define MAXLENGTH 100
typedef struct{
    int data;
    int cur;
}Component;
typedef Component StaticList[MAXLENGTH];
void init(StaticList arr){
    int i=0;
    for(i=0;i<MAXLENGTH;i++){
        arr[i].cur=i+1;
    }
    arr[i].cur=0;
}
void setData(StaticList arr){
    int i=0;
    for(i=1;i<5;i++){
        arr[i].data=i*2;
    }
    arr[0].cur=5;
    arr[4].cur=0;
    arr[99].cur=1;
}
int getBtcur(StaticList arr){
    int i=arr[0].cur;
    arr[0].cur=arr[i].cur;
    return i;
}
void insertEle(StaticList arr,int ele,int index){
    int i=getBtcur(arr);
    arr[i].data=ele;
    int k=MAXLENGTH-1;
    //因为数组最后一个元素的cur是一,相当于头指针,
    //这里循环的条件从链表的第一个数据开始到要插入的位置,让指针一直指向下一个cur
    for(int j=1;j<index;j++){
        k=arr[k].cur;
    }
    arr[i].cur=arr[k].cur;
    arr[k].cur=i;
}
void freeNode(StaticList arr,int index){
    arr[index].cur=arr[0].cur;
    arr[0].cur=index;
}
void deleteEle(StaticList arr,int index){
    int k=MAXLENGTH-1;
    for(int i=1;i<index-1;i++){
        k=arr[k].cur;
    }
    int j=arr[k].cur;
    arr[k].cur=arr[j].cur;
    freeNode(arr,j);
}
void main(){
    StaticList arr;
    init(arr);
    setData(arr);
    deleteEle(arr,4);
    for(int i=0;i<MAXLENGTH;i++){
        printf("%d ,%d\n",arr[i].data,arr[i].cur);
    }
}



猜你喜欢

转载自blog.csdn.net/z498596750/article/details/79277638