线性表——链式存储(静态)

有点小问题,埋个伏笔


代码:

#include <stdio.h>
#define MAX_SIZE 100
typedef int DataType;
typedef struct{
    DataType data;
    int cur;
}component,SLinkList[MAX_SIZE];

void InitList(SLinkList L);
int Malloc(SLinkList space);//return the backup node
void Free(SLinkList space,int k);
DataType ListInsert(SLinkList L,int i,DataType e);
DataType ListDelete(SLinkList L,int i,DataType *e);
int ListLength(SLinkList L);

void main(){
    int i;
    DataType *e=NULL;
    SLinkList L;
    InitList(L);
}

void InitList(SLinkList L){
    int i;
    L[MAX_SIZE-1].cur = 0;//list head
    for(i=0;i<MAX_SIZE-2;i++){
        L[i].cur = i+1;
    }
    L[MAX_SIZE-2].cur = 0;
}

int Malloc(SLinkList space){
    int i = space[0].cur;
    if(i){
        space[0].cur = space[i].cur;
    }
    return i;
}

DataType ListInsert(SLinkList L,int i,DataType e){
    int m,j,k = MAX_SIZE -1;
    if(i<1||i>ListLength(L)+1){
        return 0;
    }
    j=Malloc(L);
    if(j){
        L[j].data = e;
        for(m=1;m<i;m++){
            k=L[k].cur;
            L[j].cur = L[k].cur;
            L[k].cur = j;
        }
        return 1;
    }
    return 0;
}

int ListLength(SLinkList L){
    return L[0].cur;
}

void Free(SLinkList space,int k){
    space[k].cur = space[0].cur;//point to the first node
    space[0].cur = k;//
}

DataType ListDelete(SLinkList L,int i,DataType *e){
    int j,k=MAX_SIZE-1;
    if(i<1||i>ListLength(L))
        return 0;
    for(j=1;j<i;j++){
        k=L[k].cur;
        j=L[k].cur;
        L[k].cur = L[j].cur;
        e=L[j].data;
        Free(L,j);
        return 1;
    }
}



猜你喜欢

转载自blog.csdn.net/dumiaoxin/article/details/80984736