C语言实现可扩充的数组

匿名 (未验证) 提交于 2019-12-03 00:37:01
 #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); }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!