美文网首页
C实现的增长数组

C实现的增长数组

作者: Isy | 来源:发表于2016-07-30 03:40 被阅读29次
    #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 array_size(const Array *a);
    int *array_at(Array *a, int index);
    void array_inflate(Array *a, int more_size);
    
    #endif
    
    #include "array.h"
    //typedef struct {
    //  int *array;
    //  int size;
    //} Array;
    
    Array array_create(int init_size) {
        Array a;
        a.size = init_size;
        a.arry = (int*)malloc(sizeof(int)*a.size);
        return a;
    }
    void array_free(Array *a) {
        free(a->array);
        a->size = 0;
        a->array = NULL;
    }
    int array_size(const Array *a) {
        return a->size;
    }
    int *array_at(Array *a, int index) {
        if (index >= a->size) {
            array_inflate(a, (index/BNLOCK_SIZE+1)*BLOCK_SIZE-a->size);
        }
        return &(a->array[index]);
    }
    int array_get(const Array *a, 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; i < a->size; i++) {
        //  p[i] = a->array[i];
        //}
        memcpy((void*)p, (void*)a->array,a->size*sizeof(int));
        free(a->array);
        a->array = p;
        a->size += more_size;
    }
    
    typedef struct _array {
        int *array;
        int size;
        struct _array* next;
    } Array;
    Array array_create() {
        Array a;
        a.array = (int*)malloc(sizeof(int)*BLOCK_SIZE);
        a.size = BLOCK_SIZE;
        a.next = 0;
        return a;
    }
    void array_free(Array *a) {
        free(a->array);
        a->size = 0;
        if (a->next){
            array_free(a->next);
            free(a->next);
        }
    }
    
    int array_size(const Array *a) {
        if(!a->next) 
            return a->size;
        else
            return a->size+array_size(a->next);
    }
    
    int *array_at(Array *a, int index) {
        if (index < a->size) {
            return &(a->array[index]);
        } else {
            
        }
    }
    void array_inflate(Array *a) {
        //find the last block
        //alocaate a new block
        //link@
    }
    

    相关文章

      网友评论

          本文标题:C实现的增长数组

          本文链接:https://www.haomeiwen.com/subject/knazjttx.html