C语言 数据结构顺序表


#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;
#define MAXSIZE 100
#define OK 1
#define ERROR 0

typedef struct {
    ElemType *data;
    int length;
}Sqlist;

typedef int Status;

Status InitList (Sqlist *L){
    L->data=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);
    if(L->data==NULL){
        return ERROR;
    }
    L->length=0;
    return OK;
}

Status DestroyList(Sqlist *L){
    if(L->data==NULL){
        return ERROR;
    }
    free(L->data);
    L->length=0;
    return OK;
}
Status GetLength(Sqlist *L,int *len){
    if(L->data==NULL){
        return ERROR;
    }
    *len=L->length;
    return OK;
}

Status IsEmpty(Sqlist *L,int *emp){
    if(L->data==NULL){
        return ERROR;
    }
    *emp=(L->length==0);
    return OK;
}

Status Insert(Sqlist *L,int i,ElemType e){
    int index=i-1;
    int p=L->length-1;
    if(L->data==NULL){
        return ERROR;
    }
    if(index<0||index>L->length){
        return ERROR;
    }
    
    for(;p>=index;p--){
        L->data[p+1]=L->data[p];
    }
    L->data[index]=e;
    L->length++;
    return OK;
}
//有问题 
Status Delete(Sqlist *L,int i,ElemType *elem){
    if(L->data==NULL){
        return ERROR;
    }
    if(i<1||i>L->length){
        return ERROR;
    }
    *elem=L->data[i-1];
    if(i<L->length){
        for(int j=i-1;j<L->length-1;j++){
        L->data[j]=L->data[j+1];
        }
    } 
    
    L->length--;
    return OK;
}

Status GetData(Sqlist *L,int i,int *elem){
    if(L->data==NULL){
        return ERROR;
    }
    if(i<0||i>L->length){
        return ERROR;
    }
    *elem=L->data[i-1];
    return OK;
}

Status Locate(Sqlist *L,ElemType e,int *locp){
    int i;
    if(L->data==NULL){
        return ERROR;
    }
    for(i=0;i<L->length;i++){
        if(L->data[i]==e){
            *locp=i+1;
            return OK;
        }
    }
    *locp=0;
}


//有问题 
Status Print(Sqlist L){
    if(L.data==NULL){
        return ERROR;
    }
    for(int i=0;i<L.length;i++){
        printf("%d ",L.data[i]);
        return OK;
    }
}

int main(){
    Sqlist L,t;
    InitList(&L);
    InitList(&t);
    if(InitList(&L)==OK){
        printf("OK\n"); 
    }
    else{
        printf("ERROR\n");
    }
    Insert(&L,1,3);
    Insert(&L,2,2);
    
    Print(L);
    
    
    for (int i = 1; i <=MAXSIZE; i++) {
        t.data[i - 1] = i;
        t.length++;
    }
    Print(t);
    
    
    return 0;
}



Print函数不知道为什么只能输出第一个值,Delete函数貌似也有问题,其他函数还没试验。感觉思路没有问题,不知道哪里有毛病