静态链表C语言实现

#include "string.h"
#include "ctype.h"      

#include "stdio.h"    
#include "stdlib.h"   

#include "math.h"  
#include "time.h"

#define maxlen 1000

typedef struct node
{
    int data;
    int cur;  /* 游标(Cursor) ,为0时表示无指向 */
} node, StaticLinkList[maxlen];

int initlist(StaticLinkList L)
{
    int i;
    for (i = 0; i < maxlen; i++)
    {
        L[i].cur = i + 1;
    
    }
    L[maxlen - 1].cur = 0;
    return 1;
}

int get_free_space(StaticLinkList L)
{
    int i;
    i = L[0].cur;   //i为当前第一个备用节点的序号
    if (i)
    {
        L[0].cur = L[i].cur;  //将第一个节点的cur变为,第一个备用节点的cur,即下一个备用节点的序号
    }
    return i;
}

int insert_list(StaticLinkList L,int i,int value)
{
    int j, l, k;
    k = maxlen - 1;
    j = get_free_space(L);
    if (i<1 || i>maxlen - 1 || !j)
    {
        return 0;
    }

    L[j].data = value;
    for (l = 1; l < i; l++)
    {
        k = L[k].cur;
    }
    L[j].cur = L[k].cur;
    L[k].cur = j;
    return 1;
}

int see_list(StaticLinkList L)
{
    int j = 0;
    int i = L[maxlen - 1].cur;
    while (L[i].data)
    {
        printf("%d ",L[i].data);
        i = L[i].cur;
        j++;
    }
    printf("\n");
    
    return 1;
}

int delet_list(StaticLinkList L,int i)
{
    int j, k, l;
    k = maxlen - 1;
    for (l = 1; l < i; l++)
    {
        k = L[k].cur; //k是第i个节点前面那个节点的序号
    }
    j = L[k].cur;   //j是我要删除的那个点的序号
    L[k].cur = L[j].cur;

    L[j].cur = L[0].cur;
    L[0].cur = j;
    return 1;

}

int see_reallist(StaticLinkList L)
{
    int i;
    printf("the real list:\n");
    for (i = 1; i < 15; i++)
    {
        printf("%d ", L[i].data);
        
    }
    printf("\n");
    for (i = 1; i < 15; i++)
    {
        printf("%d ", L[i].cur);
    }
    printf("\nL[maxlen-1]=%d\n", L[maxlen - 1].cur);

    
    return 1;
}

int listlenght(StaticLinkList L)
{
    int i, k;
    i = 0;
    k = L[maxlen - 1].cur;
    while (L[k].data)
    {
        k = L[k].cur;
        i++;
    }
    return i;
}


int main()
{
    StaticLinkList L;
    int i, j;
    initlist(L);


    for (i = 0; i < 7; i++)
    {
        insert_list(L, 1, i);

    }
    see_list(L);

    insert_list(L, 3, 88);
    see_list(L);
    j = listlenght(L);
    printf("changdus %d\n", j);

    

    delet_list(L,5);
    see_list(L);
    j = listlenght(L);
    printf("changdus %d\n", j);



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值