C语言动态数组
typedef struct DynArray { int count; //动态数组元素个数 int capacity; //动态数组缓冲区长度 void **data; //指向数据指针数组 }DynArray void dynarray_init(DynArray *parr,int initsize)/**动态数组初始化,initsize表示初始化分配大小**/ { if(parr) { parr->data=(void **)malloc(sizeof(char)*initsize); parr->count=0; parr->capacity=initsize; } } void dynarray_free(DynArray *parr)/**动态数组的清空,先把指向的数据指针数组一个个清空,再把指向他们的parr->data清空**/ { void **p; for(p=parr->data;parr->count;parr->count--,++p) if(*p) free(*p); free(parr->data); parr->data=NULL; } void dynarray_realloc(DynArray *parr,int new_size)/**重新分配动态数组容量**/ { int capacity; void *data; capacity=parr->capacity; while(capacity<new_size) capacity*=2; data=realloc(parr->data,capacity);/**进行内存重新分配的时候移动的仅仅是指针数组,数据没有移动**/ if(!data) error("内存分配失败"); parr->capacity=capacity; parr->data=data; } void dynarray_add(DynArray *parr,void *data)/**追加动态数组元素**/ { int count; count=parr->count+1; if(count*sizeof(void *)>parr->capacity) dynarray_realloc(parr,count*sizeof(void *)); parr->data[count-1]=data; parr->count=count; } void dynarray_search(DynArray *parr,int key)/**动态数组元素查找**/ { int i; int **p; p=(int **)parr->data; for(i=0;i<parr->count;i++,p++) if(key==**p) return i; return -1; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: PHP使用正则表达式过滤特殊的字符和空白
- 下一篇: numpy教程:排序、搜索和计数