(线性表(数组)循环右移k位
已知线性表A采用顺序存储结构。编写算法,将该表A中元素循环右移K位,要求空间复杂度为O(1)
如以下结果:
表A中的原始数据是:1,2,3,4,5,6
若k=2;
则表A的最终数据是:5,6,1,2,3,4
算法思想:
线性表在处理的时候,按照数组的形式的进行处理,因此此处用数组的格式实现。首先先右移动一位,即最后一个数会被覆盖,因此先记录下最后一个数。这样循环K次就可以了,代码如下:
#include <stdio.h>
int main()
{
int data[]={1,2,3,4,5,6};
int temp,i,k;
int len= sizeof(data)/sizeof(int);//数组长度
printf("请输入移动位数k=");
scanf("%d",&k);
for(int j=1;j<k+1;j++)
{
temp = data[len-1];
for (i = len-1;i > 0 ;i--)
{
data[i] = data[i-1];
}
data[0] = temp;
}
for(int s= 0;s<len;s++){
printf("%d",data[s]);
}
}
实现结果截图:
总结:本方法没有考虑到时间复杂度的大小,如有效率更高的解法,欢迎交流!!!