数组循环移位算法

题记:不要多想,好好敲代码,看书,就这样,加油。
-------

昨天在看博客的时候,发现一个有意思的算法,但是原博客代码不全,自己就在它的基础上,按自己的理解把循环左移、循环右移的算法写出来了

优点是动态建立数字,较好

原博客: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");
}
效果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值