C 언어 구현 가 변 배열

1924 단어 C

 
#include 
#include 

const int BLOCK_SIZE = 20;
//      
typedef struct {
	int *array;
	int size;
} Array;

//     
Array array_create(int init_size);
void array_free(Array *a);
int array_size(const Array *a);
int* array_at(Array *a,int index);
void array_inflate(Array *a,int more_size);

//   
//    
Array array_create(int init_size){
	Array a;
	a.size = init_size;
	a.array = (int*)malloc(sizeof(int)*a.size);
	return a;
}
//    
void array_free(Array *a){
	free(a->array);
	a->array = NULL;
	a->size = 0;
}
//  ,      
int array_size(const Array *a){//*a   a       ,         &     
	return a->size;
}
//          
int* array_at(Array *a,int index){
	if (index >= a->size){
		array_inflate(a, (index/BLOCK_SIZE+1)*BLOCK_SIZE-a->size);
	}//          ,        BLOCK 
	return &(a->array[index]);
}

/*
int array_get(const Array *a,int index){
	return a->array[index];
} 

void array_set(Array *a, int index, int value){
	a->array[index] = value;
}
*/
//     
void array_inflate(Array *a,int more_size){
	int *p = (int*)malloc(sizeof(int)*(a->size + more_size));
	int i;
	for (i=0; isize; i++){
		p[i] = a->array[i];
	}
	free(a->array);
	a->array = p;
	a->size += more_size;
	
}


int main(int argc, char const *argv[] )
{
	Array a = array_create(10);
	printf("     :%d
",array_size(&a)); *array_at(&a,0) = 5;// *array_at(&a,1) = 6;// *array_at(&a,2) = 7;// printf(" :%d
",*array_at(&a,0)); printf(" :%d
",*array_at(&a,1)); printf(" :%d
",*array_at(&a,2)); // int number = 0; // int cnt = 0; // while (number !=-1){ // scanf("%d", &number); // if (number != -1){ // *array_at(&a,cnt++) = number; // } // } array_free(&a); return 0; }

좋은 웹페이지 즐겨찾기