/* * 用c语言实现动态数组(类似于java中的Arraylist) */ #include<stdio.h> #include<stdlib.h> typedef struct str { //保存元素的数组指针 int *a; //当前元素的个数 int index; //数组最多容纳的元素 int max; }st; /* * 创建一个最多容纳num个元素的数组 */ st *create(int num) { st *ss=(st *)malloc(sizeof(st)); if(ss==NULL) { printf("create fail!\n"); exit(1); } ss->index=0; ss->max=num; ss->a=(int *)malloc(sizeof(int)*num); if(ss->a==NULL) { printf("create fail!\n"); exit(1); } return ss; } /* * 数组扩容并复制(默认扩大为原来的两倍) */ void createbigger(st *ss) { int *p=(int *)malloc(sizeof(int)*(ss->max)*2); if(p==NULL) { printf("create fail!\n"); exit(1); } int i; for(i=0;i<ss->index;i++) { *(p+i)=ss->a[i]; } ss->index=i; ss->a=p; ss->max=ss->max*2; } /* * 向动态数组中添加元素 */ void addelement(st *ss,int value) { //数组没有装满元素 if(ss->index<ss->max) { ss->a[ss->index]=value; ss->index++; } //数组已经装满元素(此时应该扩容) else { createbigger(ss); ss->a[ss->index]=value; ss->index++; } } int main() { int num=3; st *src=create(num); addelement(src,1); addelement(src,2); addelement(src,3); printf("当前数组中的元素个数=%d,当前数组中最多可以容纳的元素个数=%d\n",src->index,src->max); addelement(src,4); printf("当前数组中的元素个数=%d,当前数组中最多可以容纳的元素个数=%d\n",src->index,src->max); return 0; }