数组的倒置
方法一:定义原数组,再定义一个用来存储倒置后的数据的数组,即是将数据一一拷贝到一个新的数组。
代码实现
#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;
}