线性表的静态单链表存储结构

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 1000

typedef int ElemType;
typedef int Status;
typedef struct {
    ElemType data;
    int cur;
}component,SLinkList[MAXSIZE];

int LocateElem_SL(SLinkList S,ElemType e);
void InitSpace_SL(SLinkList *space);
int Malloc_SL(SLinkList *space);
void Free_SL(SLinkList *space,int k);
void difference(SLinkList *space,int *S);
Status ListInsert_SL(SLinkList H,int i,ElemType e);


int main(int argc, const char * argv[]) {
    SLinkList p;
    return 0;
}

int LocateElem_SL(SLinkList S,ElemType e){
    int i=S[0].cur;
    while (i&&S[i].data!=e) {
        i=S[i].cur;
    }
    return i;
}

void InitSpace_SL(SLinkList *space){
    for(int i=0;i<MAXSIZE-1;++i)
        (*space)[i].cur=i+1;
    (*space)[MAXSIZE-1].cur=0;
}

int Malloc_SL(SLinkList *space){
    /*若备用链表非空,返回分配的结点的下标,否则返回0*/
    int i=(*space)[0].cur;
    if((*space)[0].cur)
        (*space)[0].cur=(*space)[i].cur;
    return i;
}

void Free_SL(SLinkList *space,int k){
    (*space)[k].cur=(*space)[0].cur;
    (*space)[0].cur=k;
}


Status ListInsert_SL(SLinkList L,int i,ElemType e)
{
    int j, k ,l;
    k = MAXSIZE-1;  /*获取数组最后一个位置下标*/
    j = Malloc_SL(L);  /*获取备用链表第一个位置的下标*/
    if(j)
    {
        L[j].data = e;  /*将数值赋给数据域data*/
        for(l=1;l<=i-1;l++)
            k = L[k].cur; /*获取第i个元素之前位置的下标*/
            L[j].cur = L[k].cur;
        L[k].cur = j;  /*cur值之间的重新链接*/
        return OK;
    }
    return ERROR;
}




猜你喜欢

转载自blog.csdn.net/qq_40215528/article/details/83052213