C语言实现可扩充的数组


#include "stdafx.h"
#include <stdio.h>  
#include <malloc.h>  

struct List_Exten { //定义结构体数组
    int *A; 
    int n;
    int c; // capacity
};

void List_Init(List_Exten* List);
void List_Append(List_Exten* List, int value);
void List_Show(List_Exten* List);

void List_Init(List_Exten* List) { //初始化数组
    List->c = 1;
    List->n = 0;
    List->A = (int*)malloc(sizeof(int)*List->c); //给A分配内存
}

void List_Append(List_Exten* List, int value) {  //参考Python 中的append()函数
    if (List->c == List->n) { //如果容量满了,扩充2倍
        List->c = 2 * List->c;
        int* B = (int*)malloc(sizeof(int)*List->c); //创建一个数组B,将A的数据copy给B,然后丢弃A,将结构体List指向B的首地址
        for (int i = 0; i < List->n; ++i) {
            B[i] = List->A[i];
        }
        printf("extented!\n");
        free(List->A);
        List->A = B;
    }
    List->A[List->n++] = value;
}

void List_Show(List_Exten* List) {
    for (int i = 0; i < List->n; ++i) {
        printf("%d\n",List->A[i]);
    }
}


int main() {
    List_Exten *List = (List_Exten*)malloc(sizeof(List_Exten)); //分配内存
    List_Init(List);
    List_Show(List);
    List_Append(List, 1);
    List_Show(List);
    List_Append(List, 2);
    List_Show(List);
    List_Append(List, 3);
    List_Show(List);
    List_Append(List, 4);
    List_Show(List);
    List_Append(List, 5);
    List_Show(List);
    List_Append(List, 6);
    List_Show(List);
    List_Append(List, 7);
    List_Show(List);
}

猜你喜欢

转载自blog.csdn.net/qq_35025383/article/details/80845139