用指针实现数组循环右移 c
时间: 2024-01-21 22:49:50 浏览: 107
C语言实现数组的循环左移,右移,翻转的示例
以下是用指针实现数组循环右移的 C 代码:
```c
#include <stdio.h>
void right_rotate(int *arr, int n, int k) {
k %= n; // 取模,防止 k 大于 n 的情况
if (k == 0) return; // 特判 k 等于 0 的情况
int *p = arr + n - 1; // 指向最后一个元素的指针
int *q = arr + n - k - 1; // 指向倒数第 k + 1 个元素的指针
// 将后 k 个元素依次移动到前面
for (int i = 0; i < k; i++) {
int temp = *p;
for (int *j = p; j > q; j--) {
*j = *(j - 1);
}
*q = temp;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(int);
int k = 2;
right_rotate(arr, n, k);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这里的思路是将后 k 个元素依次向前移动,每次移动一个元素,直到全部移动完成。移动的过程中,从最后一个元素开始向前遍历,依次将当前元素赋值为前一个元素的值,最后将倒数第 k 个元素赋值为最后一个元素的值。移动完成后,整个数组就完成了循环右移。
阅读全文