news 2026/11/6 1:52:30

动态数组:添加数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
动态数组:添加数据

概述

本文主要解释了核心概念何为动态数组,以及为动态数组添加第一个功能(添加数据)并将输出数组,扩容,添加数据,删除数据,插入数据的功能写成函数的形式。

一、核心概念阐述

1,动态数组:数组在C语言中一旦被定义就不能更改,但在实际运用中经常涉及数组中数据要添加插入查询等功能,动态数组即为为数组添加这些功能后的载体。
2,扩容:一般在定义数组时就已经固定了其长度,但动态数组时常有添加数据插入数据等需求,这时就需要对数组进行扩容以达到存放更多数据的效果。
3,值得注意的是在使用函数与调用函数时应注意函数调用的参数顺序应与调用时的顺序保持一致。

二、如何添加数据

在添加数据前要先根据数组长度和有效数据判断其是否需要进行扩容,若二者相等则进行扩容操作,而后添加数据即为把输入的数据赋以当前有效数值的下标,最后记得将有效数值加一。

三、如何删除数据

删除数据的方法有两种,一种为删除指定位置的数据,另一种为删除指定数据,所以我们应先根据用户输入的数字判断应使用那种方法删除数据,删除指定位置的数据需要先让用户输入想要删除的下标,然后先保存数据,再利用循环体将从指定下标的数据进行前移,最后在将size减一;删除指定数据则需要用户输入想要删除的指定数据,再利用循环体将整个数组中的数据与指定数据进行比较,发现指定数据后将从这一数据开始的数据都向前移一个,再使size减一即可,最后函数需要返回数组的指针。

四、如何插入数据

首先要先将size与len进行比较,判断是否需要进行扩容,而后需要用户输入想要插入的位置(index)与想要插入的数据(data),将从index位置开始的数据都向后移一格,再将数据data输入到index位置最后使size加一,函数返回数组的指针

五、完整实操案例:

步骤 1:定义实体类
示例代码

#include<stdio.h>#include<stdlib.h>voidprintln(int*arr,intsize){printf("Arr当前数据:%d=",size);for(inti=0;i<size;i++){printf("%d ",arr[i]);}printf("\n");}int*expand(int*arr,int*len){intnlen=(*len)*2;int*narr=(int*)malloc(nlen*sizeof(int));for(inti=0;i<*len;i++){narr[i]=arr[i];}arr=narr;*len=nlen;returnarr;}int*add(int*arr,int*size,int*len,intdata){if(*size==*len){arr=expand(arr,len);}arr[(*size)]=data;(*size)++;printf("添加数据成功\n");returnarr;}int*shan(int*arr,int*size,intnum){if(num==21){printf("==== 21:删除指定位置数据 -> 请输入数据下标 ====\n");intindex=0;scanf("%d",&index);intremove=arr[index];for(inti=index;i<*size;i++){arr[i]=arr[i+1];}(*size)--;printf("删除数据:%d\n",remove);}elseif(num==22){printf("==== 21:删除指定数据 -> 请输入数据 ====\n");intdata=0;scanf("%d",&data);inti;for(i=0;i<*size;i++){if(arr[i]==data){for(intj=i;j<*size;j++){arr[j]=arr[j+1];}break;}}(*size)--;printf("删除数据成功:%d,对应下标:%d\n",data,i);}returnarr;}int*insert(int*arr,int*size,int*len,intindex,intdata){if(*size==*len){arr=expand(arr,len);}for(inti=(*size)-1;i>=index;i--){arr[i+1]=arr[i];}arr[index]=data;(*size)++;printf("在%d位置,插入数据%d 操作成功 \n",index,data);returnarr;}intmain(){intarr[]={1,2,3,4,5};int*arrp=arr;intsize=5;//数组中的有效数据intlen=5;//初数组的长度intid=0;while(1){printf("==== 动态数组 ====\n");printf("==== 1:添加数据 ====\n");printf("==== 2:删除数据 ====\n");printf("==== 3:插入数据 ====\n");printf("==== 4:查询数据 ====\n");printf("==== 5:替换数据 ====\n");printf("==== 请输入编号: ====\n");scanf("%d",&id);switch(id){case1:{printf("==== 1:添加数据 -> 请输入数据: ====\n");intdata=0;scanf("%d",&data);arrp=add(arrp,&size,&len,data);break;}case2:{printf("==== 2:删除数据 -> 21:删除指定位置数据 22:删除指定数据:\n");intnum=0;scanf("%d",&num);arrp=shan(arrp,&size,num);break;}case3:{printf("==== 3:插入数据 -> 输入插入位置和数据: ====\n");intindex=0;intdata=0;scanf("%d %d",&index,&data);arrp=insert(arrp,&size,&len,index,data);break;}break;case4:break;case5:break;}println(arrp,size);}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/6 1:49:49

基于STM32F103C8T6的温度报警器设计

目录 1、前言 2、主要功能 3、源程序 4、原理图和PCB图 PDF原理图 PCB顶层和底层图 5、实物图 6、设计报告 7、资料清单 8、资料获取 1、前言 该设计是一种基于STM32单片机的温度检测报警器。在硬件方面主要采用STM32F103C8T6作为主控核心&#xff0c;结合数字温度传…

作者头像 李华
网站建设 2026/11/6 1:49:13

Zed官宣:支持Python Pyrefly,速度起飞

Zed 作为用 Rust 写的原生编辑器&#xff0c;一直以来的卖点就是“快得让人头皮发麻”。现在&#xff0c;他们觉得光编辑器快还不够&#xff0c;连写 Python 的那个“语言服务器&#xff08;LSP&#xff09;”也得换成超跑级别的。 Zed 已经把 Pyrefly 这个由 Meta 打造的、用 …

作者头像 李华
网站建设 2026/11/6 1:48:05

TSMaster中如何自定义27服务的安全算法?

第一找到下面这个文件然后用Visual Studio 2022打开红色框是要实现的算法&#xff08;可自定义&#xff09;&#xff0c;然后点击本地Window调试器&#xff0c;生成dll文件即可。注意&#xff1a;如果生成的文件是下面是文本文件&#xff08;.log&#xff09;&#xff0c;并不是…

作者头像 李华
网站建设 2026/11/6 1:46:01

AD20常见问题

过孔中心不捕获移动过孔不拖拽线 把过孔全部删了, 再放置一个AD自带的过孔&#xff0c;改下孔径 线要连到过孔正中心 PCB封装太大 在离远点很远的地方有机械层 飞线无法隐藏 重新导入一遍规则

作者头像 李华