数组循环左移 i 位
2018-12-04 07:13:35来源:博客园 阅读 ()
数组左移 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 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 纯虚函数与基类指针数组的运用 代码参考 2020-04-30
- STL之deque 2020-04-29
- C++基础 学习笔记六:复合类型之数组 2020-04-25
- 寻找两个有序数组的中位数 2020-04-09
- STL之vector 2020-04-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash