数据结构(C语言版)——线性表的链式存储结构(静态链表)

一、静态链表特征
1、静态链表是一种用数组来存储的链表,由两个数据域组成。data域放数据元素,cur域放后继元素的下标。
2、优点:在插入和删除操作时只需要修改游标,不需要移动元素。
3、缺点:没有解决连续存储分配带来的表长难以确定的问题,失去了顺序存储结构随机存取的特性。
二、静态链表相关算法

typedef struct
{
    int data;
    int cur;
} Component,Linklist[maxsize];

1.1静态链表的初始化

int InitList(Linklist space)
{
    int i;
    for(i=0; i<maxsize-1; i++)
    {
        space[i].cur=i+1;//0-998号下标从1-999
    }
    space[maxsize-1].cur=0;//第999号存储第一有值元素的下标
    return 1;
}

1.2静态链表的长度

int ListLength(LinkList L)
{
   int length;
   i=L[maxsize-1].cur;//获得第一有值元素下标
   while(i)
   {
     i=L[i].cur;//遍历元素,最后一个有值元素的下标为0;
     length++;
    }
  return length;
}

1.2静态链表的插入

/*相当于malloc函数*/
int Malloc_E(Linklist space)
{
    int i;
    i=space[0].cur;//备用链表第一个节点的下标
    if(space[0].cur)
        space[0].cur=space[i].cur;//更改备用链表第一节点下标
    return i;//返回插入位置下标
}
/*在某个指定的位置插入元素*/
int InsertElem(Linklist L,int i,int e)
{
    int k,j,p;
    k=maxsize-1;//k首先是最后一位元素的下标
    if(i<1 ||i>ListLength(L)+1)//不在插入范围内
        return 0;
    j=Malloc_E(L);//获得备用链表的第一个分量
    if(j)
    {
        L[j].data=e;//赋值
        for(p=0; p<=i-1; p++)
            k=L[k].cur;//寻找第i-1个位置的元素的下标
        L[j].cur=L[k].cur;//将新分量的下标和第i-1个位置的元素互换下标
        L[k].cur=j;
        return 1;
    }
    return 0;
}

1.3静态链表的删除

/*相当于free函数*/
int Free()_E(Linklist space,int k)
{
    //其实就是space[0].cur和要删除元素的cur做交换
    //让刚刚删除的元素位置作为第一优先空位
    space[k].cur=space[0].cur;//把要删除的元素收进备用链表
    space[0].cur=k;//把备用链表第一节点的位置给要删除的元素
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值