2 回答

TA貢獻(xiàn)195條經(jīng)驗(yàn) 獲得超115個(gè)贊
#include<stdio.h>?
#include<stdlib.h>?
#define?BLOCK_SIZE?20?
//
每次
“
長(zhǎng)大
”
的時(shí)候都要去申請(qǐng)新的內(nèi)存空間,拷貝需要花時(shí)間。
?
//may?fail?in?memory?restricted?situation?
typedefstruct?
{?
?
int?*array;?
?
int?size;?
}?Array;?
//
創(chuàng)建新數(shù)組
?
Array?array_create(intinit_size)?
{?
?
Array?a;?
?
a.array=(int*)malloc(sizeof(int)*init_size);?
?
a.size=init_size;?
?
return?a;?
}?
//
釋放內(nèi)存空間
?
void?array_free(Array?*a)?
{?
?
free(a->array);?
?
a->size=0;?
?
a->array=NULL;?
}?
//
得到當(dāng)前數(shù)組的長(zhǎng)度(不見(jiàn)得是元素的個(gè)數(shù))
?
intarray_size(const?Array?*a)?
{?
?
return?a->size;?
}?
//
獲取該下標(biāo)下的元素
?
int*?array_at(Array?*a,int?index)?
{?
?
void?array_inflate(Array?*a,intmore_size);//
函數(shù)申明
?
?
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

TA貢獻(xiàn)92條經(jīng)驗(yàn) 獲得超16個(gè)贊
自行設(shè)計(jì)一個(gè)結(jié)構(gòu),類似棧隊(duì)列,只是邏輯實(shí)現(xiàn)限制
添加回答
舉報(bào)