数组循环左移 i 位
时间:2018-08-21
本文章向大家介绍数组循环左移 i 位,需要的朋友可以参考一下
数组左移 i 位 3 种方法
1.临时数组存储
先将前 i 个元素用数组存起来
再将后 n - i 个元素左移 i 位
最后将存起来的数组添加到后面去即可
2.通过多次调用左移 1 位的函数
3.翻转
将待移动的数组以 i 为分隔看成两段 AB
先将 A 翻转,再将 B 翻转
之后将数组整个翻转
1 #include <stdio.h> 2 typedef int ElemType; 3 4 void move1(ElemType a[], int n, int i) { 5 //将前 i 个元素存起来 6 ElemType b[i]; 7 int j; 8 for(j = 0; j < i; j++) { 9 b[j] = a[j]; 10 } 11 //将后 n - i 个元素左移 i 位 12 int k; 13 k = 0; 14 for(j = i; j < n; j++) { 15 a[k++] = a[j]; 16 } 17 //将存起来的元素复制到其末尾 18 k = 0; 19 for(j = n - i; j < n; j++) { 20 a[j] = b[k++]; 21 } 22 } 23 24 void move2(ElemType a[], int n, int i) { 25 while(i != 0) { 26 int k; 27 int temp = a[0]; 28 for(k = 1; k < n; k++) { 29 a[k - 1] = a[k]; 30 } 31 a[n - 1] = temp; 32 i--; 33 } 34 } 35 36 void reverse(ElemType a[], int low, int high) { 37 int temp; 38 while(low < high) { 39 temp = a[low]; 40 a[low] = a[high]; 41 a[high] = temp; 42 low++; 43 high--; 44 } 45 } 46 47 void move3(ElemType a[], int n, int i) { 48 reverse(a, 0, i - 1); 49 reverse(a, i, n - 1); 50 reverse(a, 0, n - 1); 51 } 52 53 void print(ElemType a[], int n) { 54 for(int i = 0; i < n; i++) { 55 printf("%d ", a[i]); 56 } 57 printf("n"); 58 } 59 60 int main(int argc, char const *argv[]) { 61 ElemType a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 62 move2(a, 10, 3); 63 print(a, 10); 64 return 0; 65 }
- 通用网页调用本地应用程序方案(windows平台)
- vue、rollup、sass、requirejs组成的vueManager
- 顺序栈的实现和两栈共享空间
- 掌握这几个工具,做微信营销活动才能高大上!
- requirejs、vue、vuex、vue-route的结合使用,您认为可行吗?
- 日报:万达网科员工遭集体裁员,首例“花呗”套现案宣判
- cocos2d-x 学习笔录:将iOS项目编译成Andriod项目
- Oozie 快速入门
- 记Javascript一道题的理解
- DOM事件第一弹
- 【留言板】可编辑输入框操作总结
- 判断单链表是否存在环
- ECMAScript5.1的运算符、类型转换总结
- TCP编程函数和步骤
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- leetcode哈希表之独一无二的出现次数
- Vue 网站首页加载优化
- Swift日常开发随笔
- vue入门003~vue项目引入element并创建一个登录页面
- vue入门002~vue项目的两种创建方式
- IntelliJ IDEA,WebStorm,PhpStorm破解到2089年
- 小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送
- 借助云开发10行代码实现短信验证码的发送
- 借助云开发实现小程序订阅消息(模板消息)推送功能
- 1小时实战入门小程序开发,历史上的今天案例讲解
- 小程序实现全屏幕高斯模糊背景图
- 小程序顶部导航栏,可滑动,可动态选中放大
- 小程序不同页面的异步回调,callback和promise的使用讲解
- java入门019~springboot批量导入excel数据到mysql
- Java点餐系统和点餐小程序新加微信消息推送功能