1、删除指定位置上的数据;
问题及答案:
/*删除指定位置上的数据*/ #include<stdio.h> #define SIZE 100 //定义一个字符常量 int deletedate(int[],int,int); //声明一个删除函数 int n=10; //数组中实际有用的数据 int main() { int a[SIZE]={25,45,36,48,89,57,65,25,26,16}; int i,locate; scanf("%d",&locate); //删除locate处数据; n=deletedate(a,10,locate); //函数实参:数组名,长度,位置。函数返回长度n; for(i=0;i<n;i++) printf("%d\n",a[i]); //输出每一个元素 return 0; } /* 功能:删除数组中指定位置上的元素 入口参数: 数组名、数组大小、要删除元素的位置 返回值:删除后数组的大小 */ int deletedate(int arr[],int len,int loc) { int i=loc; //此赋值表示要删除i处值; //删除的位置写入其后的值覆盖 while(i<len-1) //删除数据后len长度减小 { arr[i]=arr[i+1]; //后面值覆盖前面值 i++; } len--; //删除后数组大小减1 return len; }
运行结果:
学习心得:
删除一个位置的数据,其后的每一个数据将覆盖前一个数据;
知识总结:
删除后i循环的次数变小;
删除后数据长度变小;
函数定义时注意考虑具体采用哪些参数,是否有返回值;
2、在指定位置插入一个数据;
问题及代码:
/*在指定位置上插入一个数据*/ #include<stdio.h> #define SIZE 100 //定义一个字符常量 int inserdate(int[],int,int,int); //声明一个插入的函数 int n=10; //数组中实际有用的数据 int main() { int a[SIZE]={25,45,36,48,89,57,65,25,26,16}; int i,locate,value; scanf("%d",&locate); //插入locate处数据; n=inserdate(a,10,locate,value); //函数实参:数组名,长度,位置。插入值,函数返回长度n; for(i=0;i<n;i++) printf("%d\n",a[i]); //输出每一个元素 return 0; } /* 功能:在数组中插入指定位置上的元素 入口参数: 数组名、数组大小、要插入元素的位置和它的值 返回值:插入值后数组的大小 */ int inserdate(int arr[],int len,int loc,int val) { int i=len; //给i赋值为数组的长度; //将loc后面的数值向后移动; while(i>loc) { arr[i]=arr[i-1]; //arr[i-1]当i取最小时表示将被插入的原先那个值,将其赋值给arr[],原来的位置将空出; i--; } //在i==loc处写入数值,即上面腾出的空间; arr[i]=val ; len++; //插入后数组大小减1 return len; }
运行结果:
学习心得:
与删除类似,参数入口增加了一个插入的值。
知识总结:
集体后移loc后面的数,即前一个覆盖后一个数,空出插入处的空间;
3、合并连个有序数组;
问题及代码:
/*合并两个有序数组*/ #include<stdio.h> #define SIZE 100 //定义一个字符常量 int mergedate(int[],int,int[],int,int[]) ; //声明一个合并功能的函数 int n1=10,n2=8,n3=0; //数组中实际有用的数据 int main() { int a1[SIZE]={25,45,36,48,89,57,65,25,26,16}; int a2[SIZE]={46,85,77,16,85,48,95,25}; int a3[SIZE*2]; int i; n3=mergedate(a1,10,a2,8,a3); //函数实参:两组数组名及长度,新数组名,函数返回新数组长度n3; for(i=0;i<n3;i++) printf("%d\n",a3[i]); //输出新数组的每一个元素 return 0; } /* 功能:合并数组a1、a2,将其合到新数组a3; 入口参数: 数组名a1,a2,a3,数组大小n1,n2; 返回值:合并后新数组的大小 ; */ int mergedate(int arr1[],int L1,int arr2[],int L2,int arr3[]) { int i=0,j=0,k=0; //初始化三个循环; //i与j均从最小值开始取值,将两个数组中的值进行对比,将小得值赋给新数组; while(i<L1&&j<L2) { if(arr1[i]<arr2[j]) //arr[i-1]当i取最小时表示将被插入的原先那个值,将其赋值给arr[],原来的位置将空出; arr3[k++]=arr1[i++]; else arr3[k++]=arr1[j++]; } /*上面的对比完之后,两个数组均可能剩下一些元素; 将某一个数组剩余数赋值给新数组; */ while(i<L1) arr3[k++]=arr1[i++]; while(j<L2) arr3[k++]=arr2[j++]; return k; }
运行结果:
学习心得:
合并数组,需要知道两个数组及其长度,求出新数组;
知识总结:
通过对比两个数组的元素选出结果赋值给新数组;
最后剩余的所有元素一起赋值给数组,但这些元素并未进行排序;
时间: 2024-10-07 10:19:29