资讯动态

动态数组的使用

发布时间:2026/10/26 18:20:13 来源:尧图企业网站定制
动态数组的特点数组缺点长度不可更改插入数据删除 优点取数据动作数组可以根据数据量来动态扩容。实现的具体思路1.设置数组的功能一般的功能应该是添加数据插入数据删除数据查询数据修改数据。这些内容应该出现在我们运行之后的操作台上。printf( 自定义动态数组 \n); printf( 1.添加数据 \n); printf( 2.插入数据 \n); printf( 3.删除数据 \n); printf( 4.查询数据 \n); printf( 5.修改数据 \n); printf( 6.结束操作 \n); printf( 请输入编号 \n);2.输入对应的数字应该进入到对应的方法当中这里用到分支语言方法原理是拿一个值去匹配好几个固定选项匹配上就执执行对应代码看输入id为多大符合哪个数就执行什么代码。同时头文件中加入#include stdlib.h;那么我们就设置一个变量id对应不同的方法。①case 1:添加数据。一般我们指的是添加在数组的最末端。那么第一步应该是判断数组是否需要扩容。扩容设置这里设置两个变量size和lensize存入的有效数据个数 len数组长度那么当lensize时便需要扩容if (size len) { int nLen len * 2; //2倍扩容 //***注意只能用数组长度扩容不能用字节长度 int *nArrP (int *)malloc(nLen *sizeof(int)); //分清楚arrarrPnArrP //arr是原数组,arrP是取址地址,nArrP是扩容后的数组 //复制原内存数据到新的内存上 for (int i 0; i len; i) { nArrP[i] arrP[i]; } len nLen; arrP nArrP;//更新内存地址 }*注意只能用数组长度扩容不能用字节长度思路继续接下来开始添加数据那么即为arrP[size] data; //添加数据到arrP这个地址 //***注意扩容之后不能再用arr数组因为arr永远len5这是不变的要在arrP上作用 //并且不能用nArrP它的作用只是得到一个新的扩容的数组出了if后不能再用 size; //添加数据之后有效数据1 printf(%d:数据添加成功\n, data);一定注意改变size的具体值添加数据展示switch (id) { //看输入id为多大符合哪个数就执行什么代码 case 1: { //想添加数据就输1则id 1符合switch中的case1开始执行以下代码 printf(1.添加数据请输入数据 \n); int data 0; scanf(%d, data); //把数据添加数组的末尾,需要判断是否需要扩容 if (size len) { int nLen len * 2; //2倍扩容 //***注意只能用数组长度扩容不能用字节长度 int *nArrP (int *)malloc(nLen *sizeof(int)); //分清楚arrarrPnArrP //arr是原数组,arrP是取址地址,nArrP是扩容后的数组 //复制原内存数据到新的内存上 for (int i 0; i len; i) { nArrP[i] arrP[i]; } len nLen; arrP nArrP;//更新内存地址 } arrP[size] data; //添加数据到arrP这个地址 //***注意扩容之后不能再用arr数组因为arr永远len5这是不变的要在arrP上作用 //并且不能用nArrP它的作用只是得到一个新的扩容的数组出了if后不能再用 size; //添加数据之后有效数据1 printf(%d:数据添加成功\n, data); break; }②插入数据同理先判断是否需要扩容接下来插入。整理思路插入在固定位置例如数组1,2,3,4,5;我需要插在index3的位置那么4和5就要向后移动怎么移4先移动还是5应该是5。4先移动会盖住5的数据。那么应该是先移动5把index4的位置空出来然后再让4进来。再利用循环进行移动。//将输入位置后的数据全部后移一位 for (int i size; i index; i--) { //从最后一位下手 arrP[i] arrP[i - 1]; //A B;B赋值给A,A被B覆盖 } //在这里我们用i--,从后往前 //注意这种思路如果是i的话比如说index它是第三位, //那么第三位往后移的时候它就会盖住第四位的数据,会造成数据的遗失 arrP[index] data; size; printf(%d:数据插入成功\n, data);插入数据展示case 2: { printf(2.插入数据请输入数据和插入位置 \n); int data 0; int index; scanf(%d %d, data, index); if (size len) { int nLen len * 2; //2倍扩容 //***注意只能用数组长度扩容不能用字节长度 int *nArrP (int *)malloc(nLen *sizeof(int)); //分清楚arrarrPnArrP //arr是原数组,arrP是取址地址,nArrP是扩容后的数组 //复制原内存数据到新的内存上 for (int i 0; i len; i) { nArrP[i] arrP[i]; } len nLen; arrP nArrP;//更新内存地址 } //将输入位置后的数据全部后移一位 for (int i size; i index; i--) { //从最后一位下手 arrP[i] arrP[i - 1]; //A B;B赋值给A,A被B覆盖 } //在这里我们用i--,从后往前 //注意这种思路如果是i的话比如说index它是第三位, //那么第三位往后移的时候它就会盖住第四位的数据,会造成数据的遗失 arrP[index] data; size; printf(%d:数据插入成功\n, data); break; }③删除数据这个时候不用在判断是否需要扩容了依旧1,23,45删去index2的数据那么4和5要向前移先移动4再移动5。但是需要注意最后输出“……数据删除成功”需要提取出index对应的数据。删除数据展示case 3: { printf(3.删除数据请输入删除位置 \n); int index, data; scanf(%d, index); data arrP[index]; for (int i index; i size - 1; i) { arrP[i - 1] arrP[i]; } size--; printf(%d:数据删除成功\n, data); break; }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑