数组的倒置
方法一:定义原数组,再定义一个用来存储倒置后的数据的数组,即是将数据一一拷贝到一个新的数组。
代码实现
#include <stdio.h> int main (void) { int a[5],b[5],i; printf("请输入5个数:\n"); for (i=0;i<5;i++) scanf("%d",&a[i]); for (i=0;i<5;i++) b[i]=a[4-i]; for (i=0;i<5;i++) printf("%d\t",b[i]); printf("\n"); return 0; }
但是这样将数据一一拷贝,算法实现的效率并不高。
方法二:将第一个元素和最后一个元素进行交换,第二个元素和倒数第二个元素进行交换……依次……
这时,可能要考虑到数组元素的奇偶问题。若元素个数为偶数,那么都可以实现一一交换。若元素个数为奇数,则会留下最中间的一个元素。
定义两个变量i和j,i=0,j=n-1,每交换一次,i++,j–。只要i<j,就使循环一直进行。
代码实现
#include <stdio.h> int main (void) { int a[10],i,j,temp; printf("请输入10个数:\n"); for (i=0;i<10;i++) scanf("%d",&a[i]); i=0;j=9; //注意这里必须再次给i赋值。因为经过上面的for循环后,i的值变为为9 while (i<j) { temp=a[i]; a[i]=a[j]; a[j]=temp; i++;j--; } for (i=0;i<10;i++) printf("%d\t",a[i]); return 0; }
数组元素的查找
方法一:顺序查找
输入一个数组,再输入一个数字,按照顺序依次查找。
#include <stdio.h> int main (void) { int a[10]={64,72,87,98,78,95,75,84,91,90}; int i,m,flag=0; printf("请输入一个数字:\n"); scanf("%d",&m); for (i=0;i<10;i++) if (a[i]==m) { flag=1; break; } if (flag==1) printf("YES\n"); if (flag==0) printf("NO\n"); return 0; }
数组插入
在坐标为index位置插入一个数字。可以再定义一个用来存放插入了一个元素后的新数组。
代码实现
#include <stdio.h> int main (void) { int a[11]={2,3,4,7,8,10,23,56,7,12,3}; int b[12],index,i,m; printf("请输入插入值的下标:\n"); scanf("%d",&index); printf("请输入插入值:\n"); scanf("%d",&m); for (i=0;i<12;i++) { if (i<index) b[i]=a[i]; else if (i==index) b[i]=m; else b[i]=a[i-1]; } for (i=0;i<12;i++) printf("%d\t",b[i]); return 0; }
将某数插入到已经排好的序列中。
可以先比较,看插入的数在哪两个数之间,推断之后插入的数应该在的位置。
代码实现
#include <stdio.h> int main (void) { int a[6]={3,8,19,36,78,87}; int b[7],i,m,index; printf("请输入要插入的值:\n"); scanf("%d",&m); for (i=0;i<6;i++) if (m>a[i] && m<=a[i+1]) //假定比最大值还大,或者比最小值还小,代码有些问题。 index=i+1; for (i=0;i<7;i++) { if (i<index) b[i]=a[i]; else if (i==index) b[i]=m; else b[i]=a[i-1]; } for (i=0;i<7;i++) printf("%d\t",b[i]); printf("\n"); return 0; }
删除算法
在下标为index的位置删除一个数字。
代码实现
#include <stdio.h> int main (void) { int a[10]={23,45,76,93,45,76,81,23,41,56}; int index,b[9],i;//数组b用来存储删除元素后的数据 printf("请输入你想删除的元素的下标:\n"); scanf("%d",&index); for (i=0;i<9;i++) { if (i<index) b[i]=a[i]; else if (i>=index) b[i]=a[i+1]; } for (i=0;i<9;i++) printf("%d\t",b[i]); return 0; }