简单点的话就是再建一个大小一样的数组,然后进行数组复制就可以了。时间复杂度一样,空间复杂度稍多一点,但程序简单
复杂点就是记录一个临时变量,用来作为数据项交换的缓冲区,时间复杂度一样,空间复杂度少,但程序逻辑啰嗦一些
设计思想:先把p位之前的数组暂存,然后将p位之后的数据左移p位,最后将前面的p个数据移动到数组后面。
代码如下,如有帮助,请采纳一下,谢谢。
#include <stdio.h>
//数组a元素左移m位
void moveLeft(int a[],int size,int m)
{
int i = 0;
int *p = new int[m];
for (i = 0; i < m;i++)
{
p[i] = a[i]; //暂存a的前m个数据
}
//将m位后的数据左移
for (i = m; i < size; i++)
{
a[i-m] = a[i];
}
//将前m个元素移动到a的后面
for (i = 0; i<m;i++)
{
a[size-m+i] = p[i];
}
delete[] p;
p = 0;
}
void main()
{
int i = 0;
int size;
int p;
int arr[10] = {0};
printf("请输入数组的个数:");
scanf("%d",&size);
printf("请输入数组的元素:");
for (i = 0; i < size;i++)
{
scanf("%d",&arr[i]);
}
printf("请输入左移位数:");
scanf("%d",&p);
moveLeft(arr,size,p);
printf("移动后:");
for(i = 0; i < size; i++)
printf("%d ",arr[i]);
printf("\n");
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632