问题描述

设将n(n>1)个整数存放到一维数组 arr 中。将 arr 中保存的序列循环左移p (0<p<n)个位置,即将 arr 中的数据由(X0,X1,…, Xn-1)变换为(Xp, Χρ+1, , Xn-1, Χ0, X1,…, Xp-1)。

算法思想

假设将数组扩展其两倍长,新增加的元素是其原数组的一个拷贝,前后两个数组分别记为L1和L2。那么循环左移后,下标0 ~ p-1的元素其新的位置应在n-p ~ n-1处,下标为p ~ n-1的元素与L2中n ~ 2n-p-1对应。故对数组0 ~ n-1内的元素只需将下标为i的元素放到i+n-p位置,其中p ~ n-1范围内的元素对应位置会在L2中,所以需要对n取模。

代码

核心代码

void shiftLeft(int arr[],int n,int p){int t,i=p-1,pre=arr[i],s=n;while(s-->0){i=(i+n-p)%n;   //下一个将要存放的位置t=arr[i];      //暂存取出下个位置的数arr[i]=pre;        //放入前一个数pre=t;         //将下个位置数作为下次放入的数}
}

测试代码

#include <stdio.h>void printArray(int arr[],int n);
void shiftLeft(int arr[],int n,int p);int length=0;
int main(int argc, char const *argv[])
{int R[]={1,2,3,4,5,6,7,8,9,10,11};length=sizeof(R)/sizeof(int);printArray(R,length);printf("\n-----------\n");shiftLeft(R,length,6);return 0;
}void printArray(int arr[],int n){for (int i = 0; i < n; i++){printf("%d ",arr[i]);}printf("\n");
}void shiftLeft(int arr[],int n,int p){int t,i=p-1,pre=arr[i],s=n;while(s-->0){i=(i+n-p)%n;t=arr[i];arr[i]=pre;pre=t;printArray(arr,n);}
}

【算法】将数组循环左移相关推荐

  1. 算法 - 数组循环左移m个元素

    题目 整数数组,n个元素 数组循环左移m个元素 [1,2,3,4,5,6,7,8,9] -> [4,5,6,7,8,9,1,2,3] 思路 数组整体逆转 [1,2,3,4,5,6,7,8,9] ...

  2. Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)

    Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...

  3. 长度为n的整数数组循环左移右移m位

    长度为n的整数数组循环左移m位 右移m相当于左移n-m // pat.cpp : Defines the entry point for the console application. //#inc ...

  4. 7-2 数组循环左移(20分)(顺序表实现)

    题目描述: 本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0 a1 - ...

  5. 浙江大学PTA 数据结构 习题2.2 数组循环左移 (20 分)

    本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a​0​​a​1​​⋯a​n ...

  6. 习题2.2 数组循环左移(20 分)浙大版《数据结构(第2版)》题目集

    本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a​0​​a​1​​⋯a​n ...

  7. 数组循环左移 C++

    目录 题目描述 思路分析 AC代码 题目描述 本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置, ...

  8. 20200120 数据结构和算法之 数组循环队列的实现

    数组循环队列针对数据量不大的情况下使用,可以快速地实现元素的入队和出队.入队和出队遵循先进先出(FIFO)的原则.结构体组成如下: typedef int datatype; typedef stru ...

  9. c语言 数组循环左移m位

    #include<stdio.h> //函数原型 void rightshiftleft(int *p_num,int n,int m); void enterint(int *p_num ...

最新文章

  1. 用border-width,border-color画三角形
  2. boost::sort模块实现spreadsort wstring 排序示例
  3. C语言-结构体内存对齐
  4. MySQL建立多选一列表_如何实现自定义列表的多个item,的单选或多选
  5. 03数据库的基本查询
  6. 【Java】Java 如何查看对象的内存布局
  7. Tensorflow深度学习入门(5)——优化训练MNIST数据和调用训练模型识别图片
  8. 参考文献标引方式_参考文献标注方法有哪些 为什么要标注参考文献
  9. 数位动态规划:Windy数
  10. 2017ACM ICPC Asia Regional-Daejeon H-Rock Paper Scissors[ FFT]
  11. 10.30系统进程及服务控制,前后台调用,kill,进程信号,top进程动态监控,系统控制systemctl,ssh服务和认证,用户登陆审计
  12. odoo开发笔记 -- 官方模块一览表
  13. Git分布式版本控制工具【IDEA版】【安装和使用以及上传代码到Gitee】(一篇文章精通系列)
  14. Python pandas.DataFrame.expanding函数方法的使用
  15. linux质控命令,RNA-seq摸索:2.sra下载数据→fastqc质控→hisat2/bowtie2/STAR/salmon比对→Samtools格式转换→IGV可视化结果...
  16. 建造属于你的无人驾驶车——(七)为XACRO模型添加GAZEBO属性与运动控制插件
  17. TVS/ESD国产化---雷卯电子2021上海慕尼黑展圆满收官
  18. 一个完整的项目复盘到底要怎么做?
  19. 2008年新作——《网管员面试宝典》上市了
  20. 微信小程序云开发——实现 线上注册,登录的逻辑,并保存账号到云数据库( 三 ):登录

热门文章

  1. PHP三元(三目)运算符
  2. string按空格分割
  3. FFmpeg 简单转码命令记录
  4. 机器人 郭启寅_宁波股票开户 GQY视讯董事长郭启寅简介
  5. 怎样才能像月「睡后收入」 20 万的独立开发者一样挣钱?
  6. SVM+HOG识别Matlab代码,序列前向搜索Malab代码,抗遮挡的STC跟踪C++代码
  7. Google的十大信条--来自官网
  8. Java 实现QQ第三方登录
  9. 黑科技 | 程序员用Windows记事本写出了光追演示程序:每秒30帧
  10. 联想小新潮7000触摸板失灵_联想小新潮7000装的w7系统鼠标触控板不能用了,能解决吗?...