c语言数据结构之顺序表静态链表的创建及功能函数

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

#define ERROR 0
#define OK 1
#define FALSE 0
#define TRUE 1
#define MAXSIZE 1000

typedef int ElemType ;
typedef int Status ;

/创建一个静态链表/

typedef struct 
{
    ElemType data;
    int cur;

}Component,StaticLinkList[MAXSIZE];

//数组的第一个元素和最后一个元素作为特殊元素处理,不存数据
//未被使用的数组元素称为备用链表,数组的第一个元素(下标为0的元素)存放第一个备用链表的下标。
//而数组最后一个元素的cur则存放第一个有数值元素的下标,相当于单链表的头结点

/初始化一个静态链表***/

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

}

/若备用空间的链表非空,则返回分配的结点下标给e,否则返回0*****/

Status Malloc(StaticLinkList L,int *e)
{
    int i;
    i = L[0].cur;//将第一个备用链表的地址赋值给i
    if(L[0].cur) 
    {
        L[0].cur = L[i].cur;
    }

    *e = i;
    return OK ;
}

/返回静态链表L的长度*/

Status LengthList(StaticLinkList L) 
{
    int j = 0;
    int i = L[MAXSIZE - 1].cur ;
    while (i)
    {
        i = L[i].cur;
        j++;
    }

    return j;

}

/在静态链表L中的第i个位置插入元素e****/

Status InsertLinkList(StaticLinkList L,int i,ElemType e)
{
    int k,j,ee,ii;
    k = MAXSIZE -1;
    if(i<1||i>LengthList(L)+1)
    {
        return ERROR;
    }
    Malloc(L,&ee);//获取空闲分量的下标
    j=ee;

    if(j)
    {
        L[j].data = e;
        for(ii=1;ii<=i-1;++ii)//找到第i个元素之前的位置
        {
            k = L[k].cur;
        }
        L[j].cur = L[k].cur;
        L[k].cur = j;
        return ERROR;

    }

}

/释放内存函数/

Status Free(StaticLinkList L,int i)
{
    L[i].cur = L[0].cur;
    L[0].cur = i;
}

/把静态链表L的第i个位置的元素删掉,并返回给e*******/

Status DeleteLinkList(StaticLinkList L,int i,ElemType *e)
{
    int k = MAXSIZE -1;
    int j;
    if(i<1||i>LengthList(L))//待删除元素的下标范围是否正确
    {
        return ERROR;
    }
    for(j = 1;j<=i-1;++j)
    {
        k = L[k].cur;
    }
    *e = L[i].data ;

    j = L[k].cur ;
    L[k].cur = L[j].cur;
    Free(L,j);

    return OK;
}

/主函数/

int main()
{
    StaticLinkList L;
    int length=0;
    ElemType e;
    InitStaticLinkList(L);
    InsertLinkList(L,1,3);
    printf("静态链表的第1个元素的数据域存放的是:%d\n",L[1].data);
    length = LengthList(L);
    printf("静态链表L内一共有 %d 个元素\n",length );
    DeleteLinkList(L,1,&e);
    printf("静态链表中的%d被删除\n",e);

    system("pause");
    return 0;

}

你可能感兴趣的:(c语言数据结构)