2 回答

TA貢獻195條經驗 獲得超115個贊
#include<stdio.h>?
#include<stdlib.h>?
#define?BLOCK_SIZE?20?
//
每次
“
長大
”
的時候都要去申請新的內存空間,拷貝需要花時間。
?
//may?fail?in?memory?restricted?situation?
typedefstruct?
{?
?
int?*array;?
?
int?size;?
}?Array;?
//
創建新數組
?
Array?array_create(intinit_size)?
{?
?
Array?a;?
?
a.array=(int*)malloc(sizeof(int)*init_size);?
?
a.size=init_size;?
?
return?a;?
}?
//
釋放內存空間
?
void?array_free(Array?*a)?
{?
?
free(a->array);?
?
a->size=0;?
?
a->array=NULL;?
}?
//
得到當前數組的長度(不見得是元素的個數)
?
intarray_size(const?Array?*a)?
{?
?
return?a->size;?
}?
//
獲取該下標下的元素
?
int*?array_at(Array?*a,int?index)?
{?
?
void?array_inflate(Array?*a,intmore_size);//
函數申明
?
?
if(index>=a->size)?
?
{?
?
?
array_inflate(a,(index/BLOCK_SIZE+1)*BLOCK_SIZE-a->size);//**?
?
}?
?
return?&(a->array[index]);?
}?
void?array_inflate(Array?*a,intmore_size)?
{?
?
inti;?
?
int?*p=(int?*)malloc(sizeof(int)*(a->size+more_size));//**?
?
for(i=0;i<a->size;i++)?
?
{?
?
?
p[i]=a->array[i];?
?
}?
?
free(a->array);//**?
?
a->array=p;//**?
?
a->size+=more_size;?
}?
intmain(intargc,charconst?*argv[])?
{?
?
Array?a=array_create(5);?
?
int?j;?
?
for(j=0;j<10;j++)?
?
{?
?
?
*array_at(&a,j)=j+1;?
?
}?
?
for(j=0;j<10;j++)?
?
{?
?
?
printf("%d?
?
",*array_at(&a,j));?
?
}?
?
printf("\n%d\n",array_size(&a));?
?
array_free(&a);?
?
return?0;?
}?
//
輸出
?
//1?
?
2?
?
3?
?
4?
?
5?
?
6?
?
7?
?
8?
?
9?
?
10?
//20
添加回答
舉報