在c语言中将顺序表的前m个元素跟后n个元素互换位置的代码
时间: 2024-10-08 20:27:16 浏览: 45
在 C 语言中,交换顺序表(数组)的前 m 个元素和后 n 个元素通常需要临时变量辅助操作。假设我们有一个整型数组 `arr`,长度为 `total_len`,以下是简单的步骤:
1. 创建两个指针 `start` 和 `end` 分别指向第 m+1 个元素和倒数第 n+1 个元素(因为要排除掉要交换的元素)。
2. 初始化一个临时变量 `temp` 用于存储数据。
3. 使用循环,从 `start` 到 `arr + total_len - n` 这段区间,依次将当前元素复制到 `temp`,然后将下一个元素向前移动一位。
```c
for (int i = 0; i < n; ++i) {
arr[i + m] = arr[i + m + n]; // 保存后 n 个元素
}
```
4. 同样地,再从 `arr + total_len - n` 向前移动到 `end`,将存储在 `temp` 中的数据替换回原位置。
```c
for (int i = start; i != end; ++i) {
arr[*i] = temp; // 替换前 m 个元素
temp = arr[*i]; // 更新临时变量
}
```
5. 最后,将 `temp` 的值赋给 `arr[total_len - n]`(即原来的最后一个元素),完成交换。
```c
arr[total_len - n] = temp;
```
完整的代码示例如下:
```c
#include <stdio.h>
void swapArray(int arr[], int total_len, int m, int n) {
int *start = &arr[m];
int *end = &arr[total_len - n];
int temp;
for (int i = 0; i < n; ++i) {
arr[i + m] = arr[i + m + n];
}
for (int i = start; i != end; ++i) {
temp = arr[*i];
arr[*i] = temp;
}
arr[total_len - n] = temp;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int total_len = sizeof(arr) / sizeof(arr[0]);
int m = 3, n = 3;
printf("Before swap: ");
for (int i = 0; i < total_len; ++i) {
printf("%d ", arr[i]);
}
swapArray(arr, total_len, m, n);
printf("\nAfter swap: ");
for (int i = 0; i < total_len; ++i) {
printf("%d ", arr[i]);
}
return 0;
}
```
阅读全文