将数组中的元素向右移动1

时间:2017-04-07 07:07:43

标签: c

我无法弄清楚如何正确地将数组中的元素向右移动1.数组被初始化为[1 ,2, 3, 4, 5]。因此,当我转移时,结果应为[2, 3, 4, 5, 1],但结果为[2, 3, 4, 5, 0],我不知道为什么。以下是我到目前为止的情况 -

   for(k = 0; k <= n - 1; k++){
   array[k] = array[k+1];
   }

   printf("Array is now:\n");
   k = 0;
   while(k < n) {
       printf("x[%d] = %f\n", k, array[k]);
       k++;
   }

结果垂直打印。

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但是我认为为将数组元素向右移1的任务提供完整的代码很有用。 一种想法是从头开始,然后将每个元素替换为其左侧的邻居。从一开始,我们将覆盖end元素,因此我们将保存它并将其放在循环后的第一个插槽中的最后位置。

enter image description here

代码:

#include <stdio.h>

void rotate_right(int* a, const int n) {
    if (n < 1) return;
    const int temp = a[n - 1];
    for (int i = n - 1; i > 0; i--) {
        a[i] = a[i - 1];
    }
    a[0] = temp;
}

int main() {
    int a[] = { 1 , 2, 3, 4, 5 };
    const int n = sizeof(a) / sizeof(a[0]);

    rotate_right(a, n);

    for (int i = 0; i < n; ++i) {
        printf("%d ", a[i]);
    }
}

答案 1 :(得分:0)

这是右移1的基本代码。如果你想要一个可以使用任何索引右移的通用代码,我建议使用一个变量。

//array elements are from index 0 to n-1

int tempData  = array[0]; // if right shift is only by 1
for(k = 0; k < n-1; k++){
   array[k] = array[k+1];
}

array[n-1] = tempData; //reinstall the value of first index to last index
printf("Array is now:\n");
k = 0;
while(k < n) {
    printf("x[%i] = %d\n", k, array[k]);
    k++;
}