#include "myArray.h"
//初始化
void init(struct array *parr)
{if (parr !=NULL)
{
parr->pstart =NULL;
parr->length = 0;
parr->sortstat = 0;
}elseprintf("init Error!\n");
}//初始化并插入数据
void initWithData(struct array *parr, datatype data)
{if (parr !=NULL)
{
parr->pstart = malloc(sizeof(datatype));*(parr->pstart) = data; //初始化
parr->length = 1;
parr->sortstat = 0;
}elseprintf("initWithData Error!\n");
}//初始化并插入数组
void initWithArr(struct array *parr, datatype *pdata, intdatalength)
{if (parr !=NULL)
{
parr->pstart = malloc(sizeof(datatype)*datalength); //分配数组长度的内存
memcpy(parr->pstart, pdata, sizeof(datatype)*datalength); //内存拷贝
parr->length =datalength;
parr->sortstat = 0;
}elseprintf("initWithArr Error!\n");
}//显示
void show(struct array *parr)
{if (parr == NULL || parr->pstart == NULL || parr->length == 0)
{
printf("没有数据,无法打印\n");return;
}else{
printf("\n数组此时状态:\n");for (int i = 0; i < parr->length; i++)
{
printf("%4d", parr->pstart[i]); //打印数据
}
}
}//尾部插入一个数据
void addobject(struct array *parr, datatype data)
{if (parr !=NULL)
{if (parr->pstart == NULL || parr->length == 0)
initWithData(parr, data);else{
parr->pstart = realloc(parr->pstart, (parr->length + 1) * sizeof(datatype));//拓展内存
parr->length += 1; //长度加一
parr->pstart[parr->length] = data; //插入
}
}elseprintf("addobject Error!\n");
}//尾部插入一个数组
void addobjects(struct array *parr, datatype *pdata, intdatalength)
{if (parr !=NULL)
{if (parr->pstart == NULL || parr->length == 0)
initWithArr(parr, pdata, datalength);else{
parr->pstart = realloc(parr->pstart, (parr->length + datalength)*sizeof(datatype));//拓展内存
memcpy(parr->pstart + parr->length, pdata, datalength * sizeof(datatype));
parr->length += datalength; //插入
}
}elseprintf("addobjects Error!\n");
}//查找元素,找到返回地址,没找到返回NULL
datatype *findfirst(struct array *parr, datatype data)
{if (parr == NULL || parr->pstart == NULL || parr->length == 0)
{
printf("没有数据,无法查找\n");returnNULL;
}else{int *pfind =NULL;for (int i = 0; i < parr->length; i++)
{if (parr->pstart[i] ==data)
{
pfind= &parr->pstart[i];break;
}
}returnpfind;
}
}//任意位置插入一个数据
void insertobject(struct array *parr, datatype data, datatype insertdata)
{if (parr !=NULL)
{
datatype*pfind =findfirst(parr, data);if(pfind==NULL)
printf("can not insertobject Error!\n");else{int cur = pfind - parr->pstart; //指针相减确定下标
parr->pstart = realloc(parr->pstart, (parr->length +1) * sizeof(datatype));for (int i = parr->length - 1; i >= cur; i--)
{
parr->pstart[i + 1] = parr->pstart[i]; //往后移动
}
parr->pstart[cur] = insertdata; //插入数据
parr->length += 1; //长度增加
}
}elseprintf("insertobject Error!\n");
}//任意位置插入一个数组
void insertobjects(struct array *parr, datatype data, datatype *pdata, intdatalength)
{if (parr !=NULL)
{
datatype*pfind =findfirst(parr, data);if (pfind ==NULL)
printf("can not insertobject Error!\n");else{int cur = pfind - parr->pstart; //指针相减确定下标
parr->pstart = realloc(parr->pstart, (parr->length + datalength) * sizeof(datatype));for (int i = parr->length - 1; i >= cur; i--)
{
parr->pstart[i + datalength] = parr->pstart[i]; //往后移动
}
memcpy(parr->pstart + cur, pdata, datalength * sizeof(datatype));//插入数据
parr->length += datalength; //长度增加
}
}elseprintf("insertobjects Error!\n");
}