静态链表(C语言版)

StaticLinkList.h

/*线性表的静态链表存储结构*/
#define MAXSIZE 1000/*假设链表的最大长度是1000*/
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct
{
    ElemType data;
    int cur;/*游标(cursor),为0时表示无指向*/
}Component, StaticLinkList[MAXSIZE];

Status InitLink(StaticLinkList L);/*初始化静态链表*/
Status CreatLink(StaticLinkList L, int n);/*构建静态链表*/
void PrintLink(StaticLinkList L);/*打印静态链表*/
int LengthLink(StaticLinkList L);/*返回静态链表长度*/
int Malloc_SLL(StaticLinkList L);/*申请结点*/
Status InsertLink(StaticLinkList L, int i, ElemType e);/*插入结点*/
Status Free_SLL(StaticLinkList L, int k);/*回收结点*/
Status DeleteLink(StaticLinkList L, int i);/*删除结点*/

StaticLinkList.c

Status InitLink(StaticLinkList L)
{
    int i;
    for(i=0; i     {
        L[i].cur = i+1;
    }
    
    L[MAXSIZE-1].cur = 0;
    return OK;
}

Status CreatLink(StaticLinkList L, int n)
{
    int i;
    InitLink(L);
    L[MAXSIZE-1].cur = 1;
    for(i=L[MAXSIZE-1].cur; i<=n; i++)
    {
        L[i].data = i+1;
    }
    L[0].cur = L[n].cur;
    L[n].cur = 0;
    
    return OK;
}

int LengthLink(StaticLinkList L)
{
    int i, len = 0;
    i = L[MAXSIZE-1].cur;
    while(i)
    {
        len++;
        i = L[i].cur;
    }
    
    return len;
}

int Malloc_SLL(StaticLinkList L)
{
    int i = 0;
    i = L[0].cur;
    if(i)
    {
        L[0].cur = L[i].cur;
        return i;
    }
}

Status InsertLink(StaticLinkList L, int i, ElemType e)
{
    int j, l, k;
    
    if(i<1 || i>LengthLink(L)+1)
    {
        return ERROR;
    }
    j = Malloc_SLL(L);
    L[j].data = e;
    
    //k = L[MAXSIZE-1].cur;
    k = MAXSIZE-1;
    
    for(l=1; l<=i-1; l++)
    {
        k = L[k].cur;
    }
    
    L[j].cur = L[k].cur;
    L[k].cur = j;
    
    return OK;
    
}

Status Free_SLL(StaticLinkList L, int k)
{
    L[k].cur = L[0].cur;
    L[0].cur = k;
    
    return OK;
}

Status DeleteLink(StaticLinkList L, int i)
{
    int l, k;
    
    if(i<1 || i>LengthLink(L))
    {
        return ERROR;
    }
    
    //k = L[MAXSIZE-1].cur;
    k = MAXSIZE-1;
    
    for(l=1; l<=i-1; l++)
    {
        k = L[k].cur;
    }
    
    //j = L[k].cur;
    l = L[k].cur;
    
    L[k].cur = L[i].cur;
    
    Free_SLL(L, l);
    
    return OK;
}

void PrintLink(StaticLinkList L)
{
    int i = 0;
    i = L[MAXSIZE-1].cur;
    while(i)
    {
        printf("%d ", L[i].data);
        i = L[i].cur;
    }
    
    printf("\n");
    
}

 

你可能感兴趣的:(C语言,数据结构,静态链表)