删除指定位置上的数据
#include <stdio.h> #define SIZE 100 int deleteData(int[], int, int); int n=10; //数组中实际有用元素 int main() { int d[SIZE]= {1,3,9,12,32,41,45,62,75,77}; int locate, i; scanf("%d", &locate); //删除locate处的数据 n=deleteData(d, n, locate); //输出删除后的结果 for(i=0; i<n; ++i) printf("%d ", d[i]); printf("\n"); return 0; } /* 功能:删除数组中指定位置上的元素 入口参数: 数组名、数组大小、要删除元素的位置 返回值:删除后数组的大小 */ int deleteData(int arr[], int len, int loc) { int i = loc; //在要删除的位置上写入其后的数据(覆盖) while(i<len-1) { arr[i] = arr[i+1]; i++; } //删除数据后,数组大小缩减 len--; return len; }
在指定位置插入值
#include <stdio.h> int insertData(int[], int, int, int); #define SIZE 100 int n=10; //数组中实际有用元素 int main() { int d[SIZE]= {1,3,9,12,32,41,45,62,75,77}; int locate, value, i; scanf("%d %d", &locate, &value); //在locate位置处插入value n = insertData(d, n, locate, value); //输出插入后的结果 for(i=0; i<n; ++i) printf("%d ", d[i]); printf("\n"); return 0; } /* 功能:在长度为len的数组arr的loc位置处插入值v 入口参数:数组名、长度、位置和要插入的值 返回值:插入数据后的长度 */ int insertData(int arr[], int len, int loc, int v) { int i = len; //先将loc后的数字,统统后移 while(i>loc) { arr[i] = arr[i-1]; i--; } //在i==loc处写入value arr[i] = v; len++; return len; }
合并两个有序数组
#include <stdio.h> int mergeData(int[], int, int[], int, int[]); #define SIZE 100 int n1=10,n2=7,n3=0; //数组中实际有用元素 int main() { int d1[SIZE]= {1,3,9,12,32,41,45,62,75,77}; int d2[SIZE]= {2,11,24,56,76,82,94}; int d3[SIZE*2]; int i; //合并有序数组 n3=mergeData(d1, n1, d2, n2, d3); //输出合并后的结果 for(i=0; i<n3; ++i) printf("%d ", d3[i]); printf("\n"); return 0; } /* 功能:将长度为l1的有序数组a1和长度为l2的有序数组a2,合并为新的有序数组a3 入口参数:待合并的有序数组名及长度,及合并后保存数据的数组名 返回值:合并后的有序数组长度 */ int mergeData(int a1[], int l1, int a2[], int l2, int a3[]) { int i=0,j=0,k=0; while(i<l1 && j<l2) { if(a1[i]<a2[j]) a3[k++]=a1[i++]; else a3[k++]=a2[j++]; } while(i<l1) a3[k++]=a1[i++]; while(j<l2) a3[k++]=a2[j++]; return k; }