C语言 数据结构 顺序表的实现——动态分配

C语言 数据结构 顺序表的实现——动态分配,第1张

#include
#include

#define ElemType int

#define InitSize 10
#define AddSize 10
#define true 1
#define false 0

typedef int bool;

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

void InitList(SqList* L) {
    L->data = (ElemType*)malloc(InitSize * sizeof(ElemType));
    L->length =0;
    L->MaxSize = InitSize;
}

void IncreaseSize(SqList* L) {
    int* p = L->data;
    L->data = (ElemType*)malloc((L->MaxSize + AddSize) * sizeof(ElemType));
    L->MaxSize = L->MaxSize + AddSize;
    for (int i = 0; i < L->length; i++) {
        L->data[i] = p[i];
    }
    free(p);
}


void PrintList(SqList L) {
    for (int i = 0; i < L.length; i++) {
        if (i % 10 == 0 && i / 10 != 0) {
            printf("\n");
        }
        printf("%d ", L.data[i]);
    }
}

bool ListInsert(SqList* L, int index, ElemType e) {
    if (L->length >= L->MaxSize) {
        IncreaseSize(L);
    }
    if (index<1 || index>L->length + 1) {
        return false;
    }
    for (int i = L->length; i >= index; i--) {
        L->data[i] = L->data[i - 1];
    }
    L->data[index - 1] = e;
    L->length++;
    return true;
}

bool ListDelete(SqList* L, int index, ElemType* e) {
    if (index<1 || index>L->length) {
        return false;
    }
    *e = L->data[index - 1];
    for (int i = index; i < L->length; i++) {
        L->data[i - 1] = L->data[i];
    }
    L->length--;
    return true;
}

bool GetElem(SqList L, int index, int* e) {
    if (index<1 || index>L.length) {
        return false;
    }
    *e = L.data[index - 1];
    return true;
}

bool LocateElem(SqList L, int e, int* index) {
    for (int i = 0; i < L.length; i++) {
        if (e == L.data[i]) {
            *index = i+1;
            return true;
        }
    }
    return false;
}

bool ModifyElem(SqList* L, int index, int e) {
    if (index<1 || index>L->length) {
        return false;
    }
    L->data[index - 1] = e;
    return true;
}


int main() {
    SqList L;
    InitList(&L);

    L.length = 10;
    for (int i = 0; i < 10; i++) {
        L.data[i] = 1;
    }

    ListInsert(&L, 5, 9);
    PrintList(L);
    printf("%d", L.MaxSize);

    ElemType e;
    ListDelete(&L, 6, &e);
    PrintList(L);

    ModifyElem(&L, 3, 12);
    PrintList(L);

    return 0;

}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/741099.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-28
下一篇2022-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存