c/c++语言开发共享数组循环左移 i 位

数组左移 i 位 3 种方法 1.临时数组存储 先将前 i 个元素用数组存起来 再将后 n – i 个元素左移 i 位 最后将存起来的数组添加到后面去即可 2.通过多次调用左移 1 位的函数 3.翻转 将待移动的数组以 i 为分隔看成两段 AB 先将 A 翻转,再将 B 翻转 之后将数组整个翻转 1 …

数组左移 i 位 3 种方法

1.临时数组存储

  先将前 i 个元素用数组存起来

  再将后 n – i 个元素左移 i 位

  最后将存起来的数组添加到后面去即可

 

2.通过多次调用左移 1 位的函数

 

3.翻转

  将待移动的数组以 i 为分隔看成两段 ab

  先将 a 翻转,再将 b 翻转

  之后将数组整个翻转

 

数组循环左移 i 位

 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 }

view code

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/608421.html

(0)
上一篇 2021年5月16日 下午12:31
下一篇 2021年5月16日

精彩推荐