今天先讲两个简单的顺序表移动.(今天要用到函数了,大家不会的赶紧复习复习哦!)
以1,2,3,4,5,6输出2,3,4,5,6,1为例。
不难看出目的就是把元素1, 挪到最后面。
下面先讲两种简单的解决方案:
① 先把1存起来,再把数组每个元素前移,最后把1填到最后面.
怎么前移呢??
a[0]=a[1];
a[1]=a[2];
…
a[j]=a[j+1];
直到跑完数组.这个比较简单这里就不多讲了,直接附上代码吧:
#include<stdio.h>
void simplemove(int a[],int n)// //因为直接输出了,没有返回值,为void型
{
int j=0,x;
x=a[j];//把第一位存起来
for(j=0;j<n;j++)
a[j]=a[j+1];//把后一位给前一位
a[j]=x;//把最后一位补上
}
int main(void)
{
int a[6]={1,2,3,4,5,6};
int i;
simplemove(a,6);//简单移动
for(i=0;i<6;i++)
printf("%5d",a[i]);
return 0;
}
②把1依次和自己的下一位交换.
1 2 3 4 5 6
1和2交换 2 1 3 4 5 6
1和3交换 2 3 1 4 5 6
1和4交换 2 3 4 1 5 6
…
1和6交换 2 3 4 5 6 1
{
x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
这是一个最简单的交换算法,不懂得自己用笔画一画就会了.
直到跑完数组.这个也比较简单这里就不多讲了,直接附上代码吧:
#include<stdio.h>
void exchangemove(int a[],int n)//因为直接输出了,没有返回值,为void型
{
int j=0,x;
for(j=0;j<n;j++)//普通交换算法
{
x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
}
int main(void)
{
int a[6]={1,2,3,4,5,6};
int i;
exchangemove(a,6);//交换式移动
for(i=0;i<6;i++)
printf("%5d",a[i]);
return 0;
}
我是小纸人,谢谢大家.