概述
题记:不要多想,好好敲代码,看书,就这样,加油。
-------
昨天在看博客的时候,发现一个有意思的算法,但是原博客代码不全,自己就在它的基础上,按自己的理解把循环左移、循环右移的算法写出来了
优点是动态建立数字,较好
原博客: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");
}
效果:
最后
以上就是无辜星月为你收集整理的数组循环移位算法的全部内容,希望文章能够帮你解决数组循环移位算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复