c语言编程笔录

首页 > C语言 > c语言

c语言

C语言实现数组的循环左移,右移,翻转的示例

更新时间:2023-08-12

前言

循环左移、右移和翻转是对数组进行特定操作的常见需求。在C语言中,我们可以通过遍历数组,并使用临时变量来实现这些操作。下面是关于如何在C语言中实现数组的循环左移、右移和翻转的示例代码:

示例代码

#include 

// 循环左移
void leftRotate(int arr[], int n, int d) {
    int temp[d];
    for (int i = 0; i < d; i++) {
        temp[i] = arr[i];
    }
    for (int i = d; i < n; i++) {
        arr[i-d] = arr[i];
    }
    for (int i = 0; i < d; i++) {
        arr[n-d+i] = temp[i];
    }
}

// 循环右移
void rightRotate(int arr[], int n, int d) {
    int temp[d];
    for (int i = n-d; i < n; i++) {
        temp[i-(n-d)] = arr[i];
    }
    for (int i = n-1; i >= d; i--) {
        arr[i] = arr[i-d];
    }
    for (int i = 0; i < d; i++) {
        arr[i] = temp[i];
    }
}

// 翻转数组
void reverse(int arr[], int n) {
    for (int i = 0; i < n/2; i++) {
        int temp = arr[i];
        arr[i] = arr[n-i-1];
        arr[n-i-1] = temp;
    }
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    // 数组循环左移2位
    leftRotate(arr, n, 2);
    printf("循环左移2位:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    // 数组循环右移2位
    rightRotate(arr, n, 2);
    printf("循环右移2位:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    // 翻转数组
    reverse(arr, n);
    printf("翻转数组:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    return 0;
}

解释与规范

以上示例代码中提供了三个函数:leftRotaterightRotatereverse,分别用于实现数组的循环左移、右移和翻转操作。

这些函数接受三个参数,arr[]表示待操作的数组,n表示数组的长度,d表示移动或翻转的位数。

leftRotate函数首先创建一个临时数组temp[],并将前d个元素存储在temp[]中。然后通过将后面的元素向前移动d位,空出前d个位置来实现循环左移。最后,将temp[]中的元素放置在数组的末尾,完成左移操作。

rightRotate函数与leftRotate类似,不同之处在于它首先将后d个元素存储在temp[]中。然后通过将前面的元素向后移动d位,空出后d个位置来实现循环右移。最后,将temp[]中的元素放置在数组的开头,完成右移操作。

reverse函数通过交换数组的首尾元素、次首尾元素,以此类推,来实现数组的翻转。

总结

通过以上示例代码,我们可以在C语言中实现数组的循环左移、右移和翻转操作。这些操作对于处理数组中的元素顺序具有重要的实际应用场景,比如字符串旋转、密码学等。我们可以根据具体的需求来调整操作的位数和数组的长度,以实现灵活的操作。