c语言字符的增删,使用C语言封装数组,动态实现增删改查

#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");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值