数据结构——静态链表

定义

用游标实现法描述的链表叫做静态链表

C定义:

#define MAX_SIZE 1000

typedef struct
{
    ElemType data;
    int cur;
}Component,StaticLinkList[MAX_SIZE];

插入和删除操作

一些相关方法:
//初始化
int initList(StaticLinkList space)
{
    int i;
    for (i = 0; i < MAX_SIZE - 1; i++) {
        space[i].cur = i + 1;
    }
    space[MAX_SIZE].cur = 0;
    return OK;
}

//初始化结点时 找到空余处的位置
int Malloc_SLL(StaticLinkList space)
{
    int i = space[0].cur;
    
    if (space[0].cur) {
        space[0].cur = space[i].cur;
    }
    
    return i;
}

//收回空闲结点
void Free_SLL(StaticLinkList space, int k)
{
    space[k].cur = space[0].cur;
    space[0].cur = k;
}

//返回L中元素个数
int ListLength(StaticLinkList L)
{
    int j = 0;
    int i = L[MAX_SIZE - 1].cur;
    while (i) {
        i = L[i].cur;
        j++;
    }
    return j;
}

插入操作
int insertList(StaticLinkList L,int i,ElemType e)
{
    if (i < 1 || i > ListLength(L) + 1) {
        return ERROR;
    }
    int j = Malloc_SLL(L);
    int l, k;
    k = MAX_SIZE - 1;
    if (j) {
        L[j].data = e;
        for (l = 1; l < i; l++) {
            k = L[k].cur;
        }
        L[j].cur = L[k].cur;
        L[k].cur = j;
        return OK;
    }
    return ERROR;
}

删除操作
//删除数据
int deleteList(StaticLinkList L,int i)
{
    if (i < 1 || i > ListLength(L)) {
        return ERROR;
    }
    int k = MAX_SIZE - 1;
    int j;
    for (j = 1; j < i; j++) {
        k = L[k].cur;
    }
    j = L[k].cur;
    L[k].cur = L[j].cur;
    Free_SLL(L, j);
    return OK;
}

静态链表的优缺点



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值