c语言顺序表
运行结果测试

代码
#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
typedef struct List{
DataType *data; //元素
int Max_SIZE; //数组的最大容量值 初始化后默认大小为16
int lengh; //当前数组的长度
const float GROWTH_FACTOR = 0.75; // 增长因子,当数组的长度超过了它的最大容量值,将数组的容量值扩大0.75倍
}Array;
void init_arr(Array *p_array); //初始化数组
void show_arr(Array *p_array); // 打印数组所有元素
void expansion_arr(Array *p_array); //扩容数组1.75倍
void add(Array *p_array, DataType data); //自然添加数组元素
void add(Array *p_array, int index, DataType data);//在指定数组下标位置添加元素
bool delete_data(Array *p_array, DataType data);//在数组里删除你想删除的元素(数组下标从小大到的第一个)
bool delete_index(Array *p_array, int index); // 删除数组里指定下标的元素
bool set_index(Array *p_array, int index, DataType data);//替换数组指定下标的元素
bool is_empty(Array *p_array);//判断数组是否为空
bool is_full(Array *p_array);//判断数组容量是否已满
DataType get(Array *p_array, int index);// 返回该数组指定的下标的元素
int main()
{
Array arr; //定义的一个叫arr的容器(自动扩容数组)
init_arr(&arr); //初始化容器
printf("把0~19的数添加到容器里\n");
for(int i = 0; i < 20; i++)
{
add(&arr,i);
}
printf("目前数组长度%d\n",arr.lengh);
// 打印容器所以元素
show_arr(&arr);
printf("(从第0个开始)在容器的第4个位置添加元素20\n");
add(&arr,4,20);
printf("目前数组长度%d\n",arr.lengh);
// 打印容器所以元素
show_arr(&arr);
printf("(从第0个开始)删除容器中的元素4和6\n");
delete_data(&arr,4);
delete_data(&arr,6);
printf("目前数组长度%d\n",arr.lengh);
show_arr(&arr);
printf("(从第0个开始)删除容器里的第5个元素\n");
delete_index(&arr,5);
printf("目前数组长度%d\n",arr.lengh);
show_arr(&arr);
printf("(从第0个开始)修改容器第10个位置的元素为99\n");
set_index(&arr,10,99);
printf("目前数组长度%d\n",arr.lengh);
show_arr(&arr);
printf("(从第0个开始)3位置的元素为%d",get(&arr,3));
return 0;
}
//初始化数组
void init_arr(Array *p_array)
{
p_array->Max_SIZE = 16;
p_array->data = (DataType *)malloc(sizeof(DataType) * p_array->Max_SIZE);
if(p_array->data == NULL)
{
printf("动态分配内存失败\n");
exit(-1);
}
else
{
p_array->lengh = 0;
}
return;
}
//判断数组是否为空
bool is_empty(Array *p_array)
{
if(p_array->lengh == 0)
{
return true;
}
else
return false;
}
//判断数组是否已满
bool is_full(Array *p_array)
{
if(p_array->lengh >= p_array->Max_SIZE)
{
return true;
}
else
return false;
}
//显示数组的所有元素
void show_arr(Array *p_array)
{
if(is_empty(p_array))
{
printf("数组为空\n");
}
else
{
printf("[");
for(int i = 0; i < (*p_array).lengh; i++)
{
printf("%d, ",p_array->data[i]);
}
printf("]\n");
}
return;
}
//添加元素
void add(Array *p_array,DataType data)
{
if(is_full(p_array))
{
expansion_arr(p_array);
}
p_array->data[(*p_array).lengh ++] = data;
}
//在指定数组下标位置添加元素
void add(Array *p_array, int index, DataType data)
{
if(index < 0 || index > p_array->lengh)
{
printf("你添加的数组下标错误\n");
exit(-1);
}
if(is_full(p_array))
{
expansion_arr(p_array);
}
for(int i = p_array->lengh; i > index; i--)
{
p_array->data[i] = p_array->data[i - 1];
}
p_array->data[index] = data;
p_array->lengh++;
}
//替换数组指定下标的元素
bool set_index(Array *p_array, int index, DataType data)
{
if(index < 0 || index >= p_array->lengh)
{
printf("错误数组下标\n");
return false;
}
p_array->data[index] = data;
return true;
}
//在数组里删除你想删除的元素(数组下标从小大到的第一个)
bool delete_data(Array *p_array, DataType data)
{
bool flag = false;
int index = 0;
if(is_empty(p_array))
{
printf("数组为空\n");
return flag;
}
for(int i = 0; i < p_array->lengh; i++)
{
if(data == p_array->data[i])
{
flag = true;
index = i;
break;
}
}
if(flag)
{
for(int i = index; i < p_array->lengh - 1; i++)
{
p_array->data[i] = p_array->data[i + 1];
}
p_array->lengh --;
}
else
{
printf("目标数组没有需要删除的元素\n");
}
return flag;
}
// 删除数组里指定下标的元素
bool delete_index(Array *p_array, int index)
{
if(index < 0 || index > p_array->lengh - 1)
{
printf("你添加的数组下标错误\n");
return false;
}
// 删除的不是数组最后一个元素
if(index != p_array->lengh - 1)
{
for(int i = index; i < p_array->lengh - 1; i++)
{
p_array->data[i] = p_array->data[i + 1];
}
p_array->lengh --;
return true;
}
else //删除数组最后一个元素
{
return true;
}
}
//扩容数组大小
void expansion_arr(Array *p_array)
{
Array p_new_array;
init_arr(&p_new_array);
p_array->Max_SIZE = p_array->Max_SIZE + (int)(p_array->Max_SIZE * p_array->GROWTH_FACTOR);
p_new_array.data = (DataType *)malloc(sizeof(DataType) * p_array->Max_SIZE);
if(p_new_array.data == NULL)
{
printf("扩容数组失败\n");
exit(-1);
}
else
{
for(int i = 0; i < p_array->lengh; i++)
{
p_new_array.data[i] = p_array->data[i];
}
p_array->data = (DataType *)malloc(sizeof(DataType) * p_array->Max_SIZE);
if(p_array->data == NULL)
{
printf("扩容数组失败\n");
exit(-1);
}
for(int i = 0; i < p_array->lengh; i++)
{
p_array->data[i] = p_new_array.data[i];
}
}
return;
}
// 返回该数组指定的下标的元素
DataType get(Array *p_array, int index)
{
if(index < 0 || index >= p_array->lengh)
{
printf("错误数组下标\n");
}
return p_array->data[index];
}