qfedu-c-level/day11/d6_2.c

65 lines
1.4 KiB
C
Raw Permalink Normal View History

// 设计列表数据结构操作函数,包含创建空列表,列表添加、删除和修改等操作
#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;
}