C语言动态数组就是建立一个动态数组结构体,其中包括一个指针,一个当前元素个数,一个容量。

//动态数组的结构体定义
typedef struct DYNAMICARRAY
{int *pAddr;//存放数据的地址int size;//当前有多少个元素int capacity;//容量,我容器当前最大能容纳多少元素
}Dynamic_Array;

后面就是一系列动态数组的操作函数,包括初始化、插入、打印、删除、查找等等

//初始化
Dynamic_Array* Init_Array();
//插入
void PushBack_Array(Dynamic_Array* arr,int value);
//打印
void Print_Array(Dynamic_Array* arr);
//根据位置删除
void RemoveByPos_Array(Dynamic_Array* arr,int pos);
//根据值删除
void RemoveByValue_Array(Dynamic_Array* arr, int value);
//查找
int Find_Array(Dynamic_Array* arr, int value);
//释放动态数组的内存
void FreeSpace_Array(Dynamic_Array* arr);
//清空数组
void Clear_Array(Dynamic_Array* arr);
//获得动态数组容量
int Capacity_Array(Dynamic_Array* arr);
//获得动态数据当前元素个数
int Size_Array(Dynamic_Array* arr);
//根据位置获得某个位置元素
int At_Array(Dynamic_Array* arr,int pos);

在后面就是实现具体的功能了

//动态数组的初始化
Dynamic_Array* Init_Array()
{//申请内存Dynamic_Array* myArray = (Dynamic_Array *)malloc(sizeof(Dynamic_Array));//初始化myArray->size = 0;myArray->capacity = 20;myArray->pAddr = (int*)malloc(sizeof(int)*myArray->capacity);return myArray;
}
//插入
void PushBack_Array(Dynamic_Array* arr,int value)
{if(arr == NULL){return;}if(arr->size == arr->capacity){//arr->pAddr = (int*)realloc(arr->pAddr,2*(arr->capacity));int* newSpace = (int*)malloc(sizeof(int) * arr->capacity*2);memcpy(newSpace,arr->pAddr,arr->capacity * sizeof(int));free(arr->pAddr);arr->capacity = arr->capacity*2;arr->pAddr = newSpace;}arr->pAddr[arr->size] = value;arr->size++;
}
//打印
void Print_Array(Dynamic_Array* arr)
{int i;if(arr == NULL){return;}for(i = 0;i < arr->size;i ++){printf("%d ",arr->pAddr[i]);}printf("\n");
}
//根据位置删除
void RemoveByPos_Array(Dynamic_Array* arr,int pos)
{int i;if(arr == NULL){return ;}if(pos < 0||pos >= arr->size){return ;}for(i = pos;i < arr->size;i++){arr->pAddr[i] = arr->pAddr[i+1];}arr->size --;
}//根据值删除
void RemoveByValue_Array(Dynamic_Array* arr, int value)
{if(arr == NULL){return ;}int pos = Find_Array(arr,value);RemoveByPos_Array(arr,pos);}//查找
int Find_Array(Dynamic_Array* arr, int value)
{if(arr == NULL){return -1;}int pos = -1;int i;for(i = 0;i < arr->size;i ++){if(arr->pAddr[i] == value){pos = i;break;}}return pos;
}
//释放动态数组的内存
void FreeSpace_Array(Dynamic_Array* arr)
{if(arr == NULL){return;}if(arr->pAddr != NULL){free(arr->pAddr);}free(arr);
}
//清空数组
void Clear_Array(Dynamic_Array* arr)
{if(arr == NULL){return;}arr->size = 0;
}
//获得动态数组容量
int Capacity_Array(Dynamic_Array* arr)
{if(arr == NULL){return -1;}return arr->capacity;
}//获得动态数据当前元素个数
int Size_Array(Dynamic_Array* arr)
{if(arr == NULL){return -1;}return arr->size;
}
//根据位置获得某个位置元素
int At_Array(Dynamic_Array* arr,int pos)
{if(pos < 0 || pos >= arr->size){return -1;}return arr->pAddr[pos];
}

C语言数据结构-动态数组相关推荐

  1. C语言中动态数组的作用,C语言实现动态数组

    前言 在纯C语言编程中,数组的创建必须是固定的大小,因为C语言本身没有提供动态数组这种数据结构,这是一个让习惯了使用高级语言编程的人转做C开发面临的一个很头疼的问题,本篇文章就将介绍如何使用纯C语言编 ...

  2. C语言实现动态数组dynamic array(附完整源码)

    C语言实现动态数组dynamic array 数组结构体的定义 实现以下7个接口 完整头文件 完整源文件 完整 main 测试文件 数组结构体的定义 typedef struct dynamic_ar ...

  3. C语言实现 动态数组 处理任意类型数据

    引言:动态数组在C/C++.Java.Python等语言中应用广泛,高级语言一般通过调用类或接口等可以快捷使用,C语言实现动态数组需要手动构造,以下为实现过程. 1 结构体构造动态数组 typedef ...

  4. c语言如何生成字符型动态数组,C语言构建动态数组完整实例

    C语言构建动态数组完整实例 本文以一个完整的实例代码简述了C语言构建动态数组的方法,供大家参考,完整实例如下: #include #include int main(void) { int len; ...

  5. c语言中动态数组的实现

    在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变.C语言中不允许动态数组类型.例如: int n;scanf("%d",&n);int a[n];用变量 ...

  6. C语言中动态数组的分配

    很多人在编写C语言代码的时候很少使用动态数组,不管什么情况下通通使用静态数组的方法来解决,但是现在发现这是一个相当不好的习惯,甚至可能导致编写的程序出现一些致命的错误. 尤其对于搞嵌入式的人来说,嵌入 ...

  7. 数据结构-动态数组(ArrayList)

    什么是数据结构? 数据结构就是计算机用来进行存储,组织数据的方式, 也可以想象成一个容器,用来装载数据. 常见的数据结构有以下三种分类: 而每一种数据结构则根据不同的场合以及不同的需求根据情况选择使用 ...

  8. C语言实现动态数组大小

    C语言动态数组大小 C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量.这带来了很大的不便,如果数组过小,不能容下所有数组,如果过大,浪费资源. //C语言动态分配数组大小 #inc ...

  9. C语言练习题——动态数组

    当数组长度需要由用户指定时,需要用到动态数组.malloc()函数可以在堆中申请一块内存,字节数由程序员指定.申请来的内存使用完之后需要用free()函数手动释放. 下面给出创建动态一维数组的例子 # ...

最新文章

  1. day for people, night for material
  2. java可以转linux么_Java开发必会的Linux命令(转)
  3. NopCommerce 2.5的部署
  4. 监视和排错客户端性能和连接性
  5. 项目管理的成功方程式
  6. visual studio如何用低版本打开高版本项目
  7. PHP与MySQL设计模式:代理模式
  8. 如何在cad中模块计算机,cad中家具模板哪里找(怎么在CAD图纸里面加入家具)
  9. 集合 Collection
  10. 怎么将图片压缩到最小,用什么方法
  11. iframe嵌入通讯
  12. 卷积神经网络中卷积的作用与原理
  13. sensor 感光原理和输出格式,sensor图像采集原理
  14. SPSS学习笔记——验证性因子分析
  15. Sql Server 和 Access 操作数据库结构Sql语句
  16. jenkins邮件配置和邮件发送
  17. 读Spring的源代码五:AutoWired是如何实现注入的
  18. R语言快速跳转代码,分割代码块语法
  19. 使用U-Net进行肺结节分割案例分析:DSB3Tutorial
  20. 手机怎么看html文档,手机怎么查看HTML

热门文章

  1. Matplotlib动态展示折线图项目实战(附代码)
  2. float计算丢精度_float精度损失 int 转 float 为什么有时会丢失精度
  3. 24、OpenSSL生成CA证书及终端用户证书
  4. PHP转JAVA开发30分钟实战攻略
  5. IntelliJ IDEA 2019.1 下载破解补丁激活【亲测有效】
  6. 用Python给头像或者照片加点水印!
  7. jpeg header parser
  8. 2021年高考历史学业水平测试成绩查询,普通高中学业水平考试2021年开始实施选择考!关于学考,你应该了解这些……...
  9. 服务器应用程序不可用
  10. Discuz二次开发基本知识详细讲解