题目:实现数组的滚动 (右滚动)
目前有两种思路:
1、设定两个同等长度 L 的数组a1、a2,(a1用来存放原数据,a2用来存放要移动的越界数据)。设定移动偏移量 n(小于L),将a1后n个数据存到a2中,然后将a1数组的数据从L-n下标处开始往后移,然后将存放的a2数据放在a1的前n个位置。
2、利用指针,设定指针p、a_end,变量last,偏移量n,每次存放数组最末尾数据于last中,每次将数组a中的数据向后移动1个,将last数据存放到数组a的首位,循环n次,最终得到滚动完毕的数据。
思路一代码如下:
不如思路二,不敲了
思路二代码如下:
while(n)
{
last=*(a_end-1);
for(p=a_end-1;p!=a;--p) //向右滚动一位
*p=*(p-1);
*a=last;
--n;
}
收~