编辑代码

#include <stdio.h>
#include "windows.h"

typedef int E;

struct List {
    E *array;  // 存值指针
    int capacity; // list容量
    int size;  // list 元素个数 
};

typedef struct List *ArrayList;

// struct list 初始化
BOOL initList(ArrayList list) {
    list->array = malloc(sizeof(E) * 10);
    if (list->array == NULL) return 0;
    list->capacity = 10;
    list->size = 0;
    return 1;
}

// 扩容方法
//realloc 方法动态申请内存
void dilatation(ArrayList list) {
    int newCapacity = list->capacity * 2;
    int *Array = realloc(list, newCapacity * sizeof(E));
    if (Array == NULL) printf("自动扩展失败");
    list->array = Array;
    list->capacity = newCapacity;
}

BOOL insetList(ArrayList list, E element, int index) {
    if (index < 0 || index > list->size) return FALSE; //判断index是否合法
    if (index >= list->capacity) dilatation(list); // 数组位置不足 扩容
    for (int i = list->size; i > index - 1; --i) {
        if (i == index) {
            list->array[i] = element;
            list->size++;
        } else {
            list->array[i] = list->array[i - 1];
        }
    }
    return TRUE;
}

// 删除index 处值
BOOL delList(ArrayList list,int index) {
    if (index < 0 || index > list->size-1) return FALSE; //判断index是否合法
    //删除并后前移数组
    for (int i = index; i < list->size-1; ++i) {
            list->array[i] = list->array[i+1];
    }
    //size值减1
    list->size--; 
    return TRUE;
}

//返回list size
int sizeList(ArrayList list){
    return list->size;
}

// get index位置元素
E * getList(ArrayList list,int index){
    if (index < 0 || index > list->size-1) return NULL;
    return &list->array[index];
}

//返回存在元素index
int findList(ArrayList list,E element){
    for (int i = 0; i < list->size; ++i) {
        if (list->array[i] == element) return i;
    }
    return -1;
}

// 遍历方法
void f(ArrayList list){
    for (int i = 0; i < list->size; ++i) {
        printf("%d ",list->array[i]);
    }
    printf("\n");
}

// 测试struct结构体 list是否正常运行
int main() {
    SetConsoleOutputCP(65001);
    struct List list;
    if (initList(&list)) {
        insetList(&list,5,0);
        insetList(&list,4,0);
        insetList(&list,3,0);
        insetList(&list,2,0);
        insetList(&list,1,0);
        f(&list);
        printf("%d\n",sizeList(&list));
        delList(&list,0);
        f(&list);
        int a = *getList(&list,3);
        printf("%d\n",sizeList(&list));
        printf("3的index:%d", findList(&list,3));
    } else {
        printf("初始化失败,内存空间不足");
    }


}