下面代码添加到头文件里面#include<stdio.h>#include<stdlib.h>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<stdio.h>#include<stdlib.h>#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->length+n;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->length+n;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->length+n;i++){pdata->p[i]=pnum[i-pdata->length];}(pdata->length)+=n;(pdata->reallength)+=n;}}}void printf1(struct data*pdata){if(pdata->p==NULL){printf("打印失败\n");}else{for(int i=0;i<pdata->length;i++){printf("%d\n",pdata->p[i]);}printf("动态数组长度为%d\n",pdata->length);}}void sort(struct data*pdata,int obj){if(obj==0)//从小到大{for(int i=0;i<pdata->length-1;i++){for(int j=0;j<pdata->length-1-i;j++){if(pdata->p[j]>pdata->p[j+1]){pdata->p[j]=pdata->p[j]^pdata->p[j+1];pdata->p[j+1]=pdata->p[j]^pdata->p[j+1];pdata->p[j]=pdata->p[j]^pdata->p[j+1];}}}pdata->state=1;}else//从小到大{for(int i=0;i<pdata->length-1;i++){for(int j=0;j<pdata->length-1-i;j++){if(pdata->p[j]<pdata->p[j+1]){pdata->p[j]=pdata->p[j]^pdata->p[j+1];pdata->p[j+1]=pdata->p[j]^pdata->p[j+1];pdata->p[j]=pdata->p[j]^pdata->p[j+1];}}}pdata->state=2;}}int*finddata(struct data*pdata,int num){if(pdata->state==0){for(int i=0;i<pdata->length;i++){if(pdata->p[i]==num){return&pdata->p[i];break;}}//printf("此数据不存在\n");return NULL;}else if(pdata->state==1){int low=0;int high=pdata->length-1;int mid=(low+high)/2;while(low<=high){if(pdata->p[mid]==num){return&pdata->p[mid];}else if(pdata->p[mid]>num){high=mid-1;mid=(low+high)/2;}else{low=mid+1;mid=(low+high)/2;}}// printf("此数据不存在\n");return NULL;}else{int low=0;int high=pdata->length-1;int mid=(low+high)/2;while(low<=high){if(pdata->p[mid]==num){return&pdata->p[mid];}else if(pdata->p[mid]>num){low=mid+1;mid=(low+high)/2;}else{high=mid-1;mid=(low+high)/2;}}// printf("此数据不存在\n");return NULL;}}void change(struct data*pdata,int oldnum,int newnum){int*p=finddata(pdata,oldnum);if(p==NULL){printf("查找失败,没有修改的这个数");return;}else{*p=newnum;}}void insert(struct data*pdata,int num,int insertnum,int headback) {int*curposition=finddata(pdata,num);if(curposition==NULL){printf("查找失败,没有像插入的这个数");return;}else{if(headback==0){if(pdata->length==pdata->reallength){int cur=curposition-pdata->p;pdata->p=(int*)realloc(pdata->p,(pdata->length+ 1)*sizeof(int));for(int i=pdata->length-1;i>=cur;i--){pdata->p[i+1]=pdata->p[i];}pdata->p[cur]=insertnum;pdata->length++;pdata->reallength++;}else{int cur=curposition-pdata->p;for(int i=pdata->length-1;i>=cur;i--){pdata->p[i+1]=pdata->p[i];}pdata->p[cur]=insertnum;pdata->length++;}}else//后面插入{if(pdata->length==pdata->reallength){int cur=curposition-pdata->p;pdata->p=(int*)realloc(pdata->p,(pdata->length+ 1)*sizeof(int));for(int i=pdata->length-1;i>cur;i--){pdata->p[i+1]=pdata->p[i];}pdata->p[cur+1]=insertnum;pdata->length++;pdata->reallength++;}else{int cur=curposition-pdata->p;for(int i=pdata->length-1;i>cur;i--){pdata->p[i+1]=pdata->p[i];}pdata->p[cur+1]=insertnum;pdata->length++;}}}}void deleteone(struct data*pdata,int num){if(pdata->p==NULL){printf("删除失败\n");return;}else{int*curposition=finddata(pdata,num);int cur=curposition-pdata->p;for(int i=cur;i<pdata->length-1;i++){pdata->p[i]=pdata->p[i+1];}pdata->length-=1;}}void deleteall(struct data*pdata,int num){if(pdata->p==NULL){printf("删除失败\n");return;}else{while(finddata(pdata,num)){deleteone(pdata,num);}}}int*find(int*p,int num,int n){for(int i=0;i<n;i++){if(p[i]==num){return p+i;break;}}return NULL;}struct find findalldata(struct data*pdata,int num){struct find resn;if(pdata->p==NULL){printf("查找失败\n");resn.n=0;resn.pp=NULL;return resn;}else{int tem=0;for(int*pp=find(pdata->p,num,pdata->length);pp!=NULL;pp= find(pp+1,num,pdata->length-(pp-pdata->p))){tem++;}resn.n=tem;int**p1=(int*)malloc(sizeof(int*)*tem);resn.pp=p1;for(int*pp=find(pdata->p,num,pdata->length),j=0;pp!=NULL; j++,pp=find(pp+1,num,pdata->length-(pp-pdata->p))){p1[j]=pp;//printf("%p,%d\n", p1[j], *p1[j]);}return resn;}}。