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