可变数组

来源:互联网 发布:网络语言暴力 例子 编辑:程序博客网 时间:2024/05/16 08:36

头文件

#ifndef _ARRAY_H_#define _ARRAY_H_typedef struct{int *array;int size;} Array;Array array_create(int init_size);//创建数组void array_free(Array *a);//释放数组int  arry_size(const Array *a);//数组元数int* array_at(Array *a,int index);//查找数组void array_inflate(Array *a,int more_size);//增加数组元数#endif


主程序

#include<stdio.h>#include"array.h"#include<stdlib.h>const BLOCK_SIZE=20Array 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  arry_size(const Array *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);}return &(a->array[index]);}int array_get(const Array *a,int index){return a->array[index];}int 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)*(more_size+a->size));int i;for(i=0;i<a->size;i++){p[i]=a->array[i];}free(a->array);a->array=p;a->size+=more_size; }int main(){Array a=array_create(100);printf("%d\n",arry_size(&a));* array_at(&a,0)=10;printf("%d\n",*array_at(&a,0));int number=0;int cnt=0;while(number!=-1){scanf("%d",&number);if(number!=-1)* array_at(&a,cnt++)=number;}array_free(a);}




0 0
原创粉丝点击