以下是实现数组功能的代码
# include <stdio.h>
# include <malloc.h>//malloc函数
# include <stdlib.h>//exit函数
//定义了一个数据类型,该数据类型的名字叫做struct Arr, 该数据类型含有三个成员,分别是pBase, len, cnt
struct Arr
{
int * pBase;//当前数组第一位的地址
int len;//当前数组的长度
int cnt;//当前数组存储有效元素个数
};
void init_arr(struct Arr * pArr, int length); //初始化数组函数
bool append_arr(struct Arr * pArr, int val); //追加元素
bool insert_arr(struct Arr * pArr, int pos, int val); // pos的值从1开始
bool delete_arr(struct Arr * pArr, int pos, int * pVal);//删除第pos元素
int get();
bool is_empty(struct Arr * pArr);//判断数组是否为空
bool is_full(struct Arr * pArr);//判断数组是否为满
void sort_arr(struct Arr * pArr);//排序数组
void show_arr(struct Arr * pArr); //遍历数组
void reverse_arr(struct Arr * pArr);//反转数组顺序
int main(void)
{
//新建一个数组对象
struct Arr arr;
//定义一个接受删除元素的val
int val;
//初始化数组
init_arr(&arr,5);
append_arr(&arr,1);
append_arr(&arr,4);
append_arr(&arr,7);
append_arr(&arr,-5);
append_arr(&arr,9);
printf("追加元素后的数组如下:\n");
show_arr(&arr);
delete_arr(&arr,5,&val);
printf("被删除元素的值为:");
printf("%d\n", val);
printf("删除第5个元素后的数组如下:\n");
show_arr(&arr);
insert_arr(&arr,1,9);
printf("插入元素后的数组如下:\n");
show_arr(&arr);
reverse_arr(&arr);
printf("反转元素后的数组如下:\n");
show_arr(&arr);
sort_arr(&arr);
printf("从小到大排序后的数组如下:\n");
show_arr(&arr);
return 0;
}
//初始化数组函数
void init_arr(struct Arr * pArr, int length)
{
pArr->pBase = (int *)malloc(sizeof(int) * length);
if (NULL == pArr)
{
printf("数组初始化失败,请稍后重试!\n");
exit(-1);
}
pArr->len = length;
pArr->cnt = 0;
}//init_arr
//判断数组是否为满
bool is_full(struct Arr * pArr)
{
if (pArr->cnt == pArr->len)
{
return true;
}
else
{
return false;
}
}//is_full
//追加数组元素函数
bool append_arr(struct Arr * pArr, int val)
{
//判断数组是否为满
if (is_full(pArr))
{
printf("数组已满,无法追加元素\n");
return false;
}
//如果不满,追加元素
pArr->pBase[pArr->cnt] = val;
pArr->cnt++;
return true;
}//append_arr
//判断数组是否为空
bool is_empty(struct Arr * pArr)
{
if (0 == pArr->cnt)
{
return true;
}
else
{
return false;
}
}//is_empty
//遍历数组
void show_arr(struct Arr * pArr)
{
if (is_empty(pArr))
{
printf("该数组为空!\n");
return;
}
for (int i = 0; i < pArr->cnt; i++)
{
printf("%d ", pArr->pBase[i]);
}
printf("\n");
}//show_arr
//添加数组元素函数
bool insert_arr(struct Arr * pArr, int pos, int val)
{
//判断数组是否已满
if (is_full(pArr))
{
printf("数组已满,无法添加!\n");
return false;
}
if (pos>pArr->len || pos<1)
{
printf("添加元素位置不合法!\n");
return false;
}
//添加元素
for (int i = pArr->cnt-1; i >= pos-1; i--)
{
pArr->pBase[i+1] = pArr->pBase[i];
}
pArr->pBase[pos-1] = val;
pArr->cnt++;
return true;
}//insert_arr
//删除第pos元素
bool delete_arr(struct Arr * pArr, int pos, int * pVal)
{
//判断数组是否为空
if (is_empty(pArr))
{
printf("数组为空,无法删除!\n");
return false;
}
if (pos>pArr->len || pos<1)
{
printf("删除元素位置不合法!\n");
return false;
}
//提取被删除元素的值
*pVal = pArr->pBase[pos-1];
for(int i = pos-1; i < pArr->cnt; i++)
{
pArr->pBase[i] = pArr->pBase[i+1];
}
pArr->cnt--;
return true;
}//delete_arr
//反转数组顺序
void reverse_arr(struct Arr * pArr)
{
int i = 0;
int j = pArr->cnt-1;
int t;
while (i < j)
{
t = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = t;
i++;
j--;
}
return;
}//reverse_arr
//排序数组
void sort_arr(struct Arr * pArr)
{
int t;
for (int i = 0; i < pArr->cnt; i++)
{
for (int j = i+1; j < pArr->cnt; j++)
{
if (pArr->pBase[i] > pArr->pBase[j])
{
t = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = t;
}
}
}
return;
}//sort_arr
(tips:如果发现有问题还请多多指教,谢谢!)