题目描述:
- 使用函数实现对数组左移一位 Left_Move_Ar;
- 使用函数实现对数组左移k位Left_Move_Ar_k;
- 使用函数实现对数组右移一位Right_Move_Ar;
- 使用函数实现对数组右移k位 Right_Move_Ar_k。
算法思想:
要想实现对数组的移动,只需要将首位或末位数组元素放置进一个临时空间,剩下的元素依次移动;这是移动一位,移动K位,那么K次调用就可以。
代码实现:
#include <stdio.h>
void print(int *br, int n)
{
if(NULL == br || n < 1) return ;
for(int i = 0; i < n; i ++)
{
printf("%d ",br[i]);
}
printf("\n");
}
void Left_Move_Array(int *br, int n)
{
if(NULL == br || n < 1) return ;
int tmp = br[0];
for(int i = 0; i < n-1; i ++)
{
br[i] = br [i+1];//*(br+i) = *(br+i+1)
}
br[n-1] = tmp;
}
void Right_Move_Array(int *br, int n)
{
if(NULL == br || n < 1) return ;
int tmp = br[n-1];
for(int i = n-1; i > 0; i--)
{
br[i] = br [i-1];
}
br[0] = tmp;
}
void Left_Move_Array_k(int *br, int n, int k)
{
if(NULL == br || n < 1) return ;
k = k % n;
if(k > 0)
{
for(int i = 0; i< k; i ++)
{
Left_Move_Array(br,n);
}
}
else
{
k = -k;
for(int i = 0; i < k; i ++)
{
Right_Move_Array(br,n);
}
}
}
void Right_Move_Array_k(int *br, int n, int k)
{
Left_Move_Array_k(br, n, -k);
}
int main()
{
const int n = 10;
int k = 0;
int br[10] = {12,23,34,45,56,67,78,89,90,111};
printf("原数组为:\n");
print(br,n);
printf("数组移动一位:(分别左移、右移)\n");
Left_Move_Array(br,n);
print(br,n);
Right_Move_Array(br,n);
print(br,n);
printf("数组移动多(k)位:(输入正数则左移,负数则右移) \n");
scanf("%d",&k);
Left_Move_Array_k(br,n,k);
print(br,n);
return 0;
}