1. 程式人生 > 其它 >資料結構 Day 1 順序表 C語言實現

資料結構 Day 1 順序表 C語言實現

#include <stdio.h>

#include <stdlib.h>

#define MAXSIZE 100

typedef int ElemType;

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

int InitSqList(SqList *sqlist) {
    sqlist->data = (SqList *) malloc(MAXSIZE * sizeof(ElemType));
}

int Length(SqList sqlist) {
    return sqlist.length;
}

int LocateElem(SqList sqlist, ElemType e) {
    for (int i = 0; i < sqlist.length; i++) {
        if (sqlist.data[i] == e)return i;
    }
    return -1;
}

ElemType GetElem(SqList sqlist, int index) {
    if (index < 0 || index > sqlist.length - 1 || index >= MAXSIZE)return -1;
    return sqlist.data[index];
}

int ListInsert(SqList *sqlist, int index, ElemType e) {
    if (index < 0 || index > sqlist->length || sqlist->length >= MAXSIZE)return -1;
    for (int i = sqlist->length - 1; i > index; i--) {
        sqlist->data[i + 1] = sqlist->data[i];
    }
    sqlist->data[index] = e;
    sqlist->length++;
    return 0;
}

int ListDelete(SqList *sqlist, int index) {
    if (index < 0 || index >= sqlist->length || sqlist->length >= MAXSIZE || sqlist->length == 0)return -1;
    for (int i = index; i < sqlist->length - 1; i++) {
        sqlist->data[i] = sqlist->data[i + 1];
    }
    sqlist->length--;
    return 0;
}

int PrintList(SqList sqlist) {
    if (sqlist.length <= 0)return -1;
    for (int i = 0; i < sqlist.length; i++) {
        printf("%d ", sqlist.data[i]);
    }
    return 0;
}

int Empty(SqList sqlist) {
    if (sqlist.length == 0)return 1;
    else return 0;
}

int Destroy(SqList *sqlist) {
    sqlist->length = 0;
    if (sqlist->data != NULL)free(sqlist->data);
    if (sqlist->data == NULL)return 1;
    else return 0;
}

int main(void) {
    SqList sqlist;
    InitSqList(&sqlist);
    printf("\n%d\n", Empty(sqlist));
    for (int i = 0; i < 10; ++i) {
        ListInsert(&sqlist, i, i * i);
    }
    printf("\n%d\n\n", Empty(sqlist));
    printf("\n");
    PrintList(sqlist);
    printf("\n");
    ListInsert(&sqlist, 5, 123);
    printf("GetElem(sqlist,5):%d\n", GetElem(sqlist, 5));
    PrintList(sqlist);
    printf("\n");
    ListDelete(&sqlist, 5);
    PrintList(sqlist);
    printf("\n");
    printf("%d\n", Length(sqlist));
    Destroy(&sqlist);
    printf("\n%d\n\n", Empty(sqlist));
    return 0;
}