有n个整数,使前面各数顺序向后移m个位置,即最后m个数变成最前面m个数。写一非递归函数实现以上功能,要求使用指针。在主函数中调用验证。
时间: 2024-12-08 12:14:57 浏览: 52
在C++中,你可以通过两个指针来实现这个功能。假设数组名是`arr`,数组长度是`n`,需要移动的位置是`m`。我们可以创建一个名为`rotateArray`的函数,它接受这三个参数并完成数组的旋转。
```cpp
#include <iostream>
void rotateArray(int arr[], int n, int m) {
// 如果m大于n或者等于0,直接返回,因为不需要移动
if (m >= n || m == 0) {
return;
}
// 使用两个指针,一个指向开始,一个指向结束,并且从头开始移动元素
int start = 0;
int end = n - 1;
// 跳过前m个元素
while (start < m) {
++start;
}
// 将剩余部分连接到一起
while (end != start) {
std::swap(arr[start], arr[end]);
++start;
--end;
}
}
// 主函数用于验证
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int m = 2;
rotateArray(arr, n, m);
// 输出旋转后的数组
for (int i = 0; i < n; ++i) {
std::cout << arr[i] << " ";
}
std::cout << "\n";
return 0;
}
```
在这个程序中,`rotateArray`函数首先检查`m`是否合理,然后用`start`指针从`m`位置开始,`end`指针从数组末尾向前移动,将每个元素依次与`start`位置的元素交换,直到`start`和`end`相遇,完成了数组的旋转。
阅读全文