美文网首页
可变数组

可变数组

作者: 持之以蘅 | 来源:发表于2020-03-09 12:40 被阅读0次

    头文件

    #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"
    #include<stdio.h>
    #include<stdlib.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);
    
    Array 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;//保险起见把指针为空,size为0; 
        a->size=0;
    }
    int array_size(const Array *a)
    {
        return a->size; 
    } 
    int* array_at(Array *a,int index)
    {
        if(index>=a->size)//越界
        {
            //array_inflate(a,index-a->size);
            array_infloat(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];
    //}
    //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];
        }
        free(a->array);
        a->array=p;
        a->size+=more_size;
        
     } 
    
    int main( int argc,char const *argv[])
    {
        Array a=array_create(100); 
        printf("%d\n",array_size(&a));
        *array_at(&a,0)=10;
        printf("%d\n",*array_at(&a,0)); 
        int numbers;
        int cnt=0;
        while(number!=-1)
        {
            scanf("%d",&number);
            if(number!=-1)
            *array_at(&a,cnt++)=numbers;
            //scanf("%d",array_at(&a,cnt++));
            
        }
        array_free(&a);
        return 0;
     } 
    

    相关文章

      网友评论

          本文标题:可变数组

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