// 设计列表数据结构操作函数，包含创建空列表，列表添加、删除和修改等操作
#include <stdio.h>
#include <stdlib.h>
#include <string.h> // memset

int *create_list(int cap_size)
{
    int *p = (int *)malloc(cap_size * sizeof(int));
    if (NULL == p)
        perror("malloc error");
    else
        memset(p, 0, cap_size * sizeof(int));
    return p;
}

int *add(int *p, int size, int element)
{
    // 判断当前的空间是否已满
    int i = 0;
    while (i < size && p[i] != 0) // *(p+i) = p[i]
    {
        i++;
        // 这里不能用 p++, 因为会改变地址偏移量
        // p++;
    }

    if (i < size) // 空间未满
    {
        p[i] = element; // 将 element 添加到空间中
    }
    else if (i == size)
    {
        printf("空间已满, 开始扩容\n");
        int *new_p = (int *)realloc(p, (size + 1) * sizeof(int)); // 重新分配空间
        if (NULL == p)
            perror("realloc error");
        else
        {
            p = new_p;
            p[i] = element;
        }
        return p;
    }
}

int main()
{
    int *p = create_list(4);
    p[0] = 2, p[1] = 3, p[2] = 4;

    for (int i = 0; i < 4; i++)
        printf("%d ", *(p + i));
    printf("\n");
    add(p, 4, 100); // p[3] = 100;
    add(p, 4, 200); // 100
    add(p, 4, 300); // 100
    add(p, 4, 400); // 100

    for (int i = 0; i < 6; i++)
        printf("%d ", *(p + i));
    printf("\n");
    free(p);

    return 0;
}