牛骨文教育服务平台(让学习变的简单)
博文笔记

C语言动态数组

创建时间:2016-10-03 投稿人: 浏览次数:153
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;
}

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。