c语言数组的动态分配
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面代码添加到头文件里面
#include
#include
struct data
{
int*p;//指针保存数组起始点
int length;//保存数组长度
int reallength;//实际分配内存长度
int state;//0代表无序,1代表有序从小到大,2代表有序从大到小
};
struct find
{
int**pp;
int n;
};
void init(struct data*pdata);//初始化
void reinit(struct data*pdata);//重新初始化
void addobject(struct data*pdata,int num);//增加一个元素
void addobjects(struct data*pdata,int*pnum,int n);//增加一个数组void printf1(struct data*pdata);//打印一个出来
void sort(struct data*pdata,int obj);//实现排序obj=0从小到大,否则从大到小
int*finddata(struct data*pdata,int num);//找到并返回第一次找到的地址void change(struct data*pdata,int oldnum,int newnum);//修改一个数据void insert(struct data*pdata,int num,int insertnum,int headback);//插入一个数据,0代表前插,1代表后插
void deleteone(struct data*pdata,int num);//删除第一个找到的数据
void deleteall(struct data*pdata,int num);//删除找到的全部数据
struct find findalldata(struct data*pdata,int num);//返回一片内存,包含所有找到的元素
添加到源文件中
#include
#include
#include"动态数组.h"
void init(struct data*pdata)
{
pdata->p=NULL;
pdata->length=0;
pdata->reallength=0;
pdata->state=0;
}
void reinit(struct data*pdata)
{
if(pdata->p==NULL)
{
return;
}
else
{
free(pdata->p);
pdata->p=NULL;
pdata->length=0;
pdata->reallength=0;
pdata->state=0;
}
}
void addobject(struct data*pdata,int num)
{
if(pdata->p==NULL)
{
pdata->p=(int*)malloc(sizeof(int));
*(pdata->p)=num;
pdata->length++;
pdata->reallength++;
}
else
{
if(pdata->length==pdata->reallength)
{
(pdata->length)++;
(pdata->reallength)++;
pdata->p=(int*)realloc(pdata->p,
(pdata->length)*sizeof(int));
pdata->p[pdata->length-1]=num;
}
else
{
(pdata->length)++;
pdata->p[pdata->length-1]=num;
}
}
}
void addobjects(struct data*pdata,int*pnum,int n)
{
if(pdata->p==NULL)
{
pdata->p=(int*)malloc(sizeof(int)*n);
for(int i=pdata->length;i
{
pdata->p[i]=pnum[i];
}
pdata->length+=n;
pdata->reallength+=n;
}
else
{
if(pdata->length+n<=pdata->reallength)
{
for(int i=pdata->length;i
{
pdata->p[i]=pnum[i-pdata->length];
}
(pdata->length)+=n;
}
else
{
pdata->p=(int*)realloc(pdata->p,(pdata->length+ n)*sizeof(int));
for(int i=pdata->length;i
{
pdata->p[i]=pnum[i-pdata->length];
}