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教程:排序、搜索和计数
