题记:不要多想,好好敲代码,看书,就这样,加油。
-------
昨天在看博客的时候,发现一个有意思的算法,但是原博客代码不全,自己就在它的基础上,按自己的理解把循环左移、循环右移的算法写出来了
优点是动态建立数字,较好
原博客:http://blog.csdn.net/ns_code/article/details/8846643
该种算法可能对循环队列缓冲移位有一定的帮助,特和大家分享:
循环左移算法
#include <stdio.h>
#include <stdlib.h>
main()
{
int len;
int *start;
int *end;
int current,t,i,k,m;
printf("请输入数组个数:");
scanf("%d",&len);
start = (int *)malloc(len*sizeof(int));
end = (int *)malloc(len*sizeof(int));
printf("请输入数组元素,以空格键隔开:\n");
for(m=0;m<len;m++)
scanf("%d",&start[m]);
//原数组输出显示:start
for(m=0;m<len;m++)
printf("%d ",start[m]);
printf("\n");
//current为左移指针,表示移多少次
for(current=0;current<len;current++)
{
//将原数组0~current-1 平移给end数组len-current+k~len 原数组左半部分赋值给输出数组后半部分,变化次数为current
for(k=0;k<current;k++)
end[len-current+k] = start[k];
//将原数组 current~len平移给end数组0~current 原数组后半部分赋值给输出数组左半部分,变化次数为len-current
for(t=current,i=0;t<len;t++)
end[i++]=start[t];
printf("循环左移%d位后的结果:", current);
// 左移后输出显示:end
for(m=0;m<len;m++)
printf("%d ",end[m]);
printf("\n");
}
system("pause");
}
效果:
循环右移算法
代码:
#include <stdio.h>
#include <stdlib.h>
main()
{
int len;
int *start;
int *end;
int current,t,i,k,m;
printf("请输入数组个数:");
scanf("%d",&len);
start = (int *)malloc(len*sizeof(int));
end = (int *)malloc(len*sizeof(int));
printf("请输入数组元素,以空格键隔开:\n");
for(m=0;m<len;m++)
scanf("%d",&start[m]);
//原数组输出显示:start
for(m=0;m<len;m++)
printf("%d ",start[m]);
printf("\n");
//current为右移指针,表示移多少次
for(current=0;current<len;current++)
{
//将原数组0~len-current-1 平移给end数组current+k~current 原数组左半部分赋值给输出数组后半部分,变化次数为len-current
for(k=0;k<len-current;k++)
end[current+k] = start[k];
//将原数组 len-current~len平移给end数组0~current 原数组后半部分赋值给输出数组左半部分,变化次数为current
for(t=len-current,i=0;t<len;t++)
end[i++]=start[t];
printf("循环右移%d位后的结果:", current);
// 右移后输出显示:end
for(m=0;m<len;m++)
printf("%d ",end[m]);
printf("\n");
}
system("pause");
}
效果: