1.设有一个线性表(e0, e1, …, en-2, en-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原址内容置换为(en-1, en-2, …, e1, e0)。用C语言数据结构的知识编写。
时间: 2024-09-30 11:13:32 浏览: 77
在C语言中,你可以通过遍历数组并将元素从头到尾逐个复制到相反的位置来实现线性表的原地逆置。由于这是一个原地操作,我们不需要额外的空间。以下是一个简单的示例函数,使用了两个指针,一个指向数组的开始(`start`),另一个指向数组的结束(`end`),然后交换它们指向的元素,直到它们相遇。
```c
#include <stdio.h>
void reverseArray(int A[], int n) {
if (n <= 1)
return; // 如果只有一个元素或空数组,无需反转
int start = 0; // 指向数组开头
int end = n - 1; // 指向数组结尾
while (start < end) { // 当start小于end时继续
// 交换 start 和 end 指向的元素
int temp = A[start]; // 临时存储 start 的值
A[start] = A[end];
A[end] = temp;
// 移动指针
start++;
end--;
}
}
// 测试函数
int main() {
int array[] = {0, 1, 2, 3, 4, 5};
int size = sizeof(array) / sizeof(array[0]);
printf("Original array: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
reverseArray(array, size);
printf("\nReversed array: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
return 0;
}
```
当你运行这个程序,输入的线性表会原地逆置。注意,`reverseArray`函数假设输入数组`A`有足够的空间存放`n`个元素,并且`size`变量给出了正确的长度。
阅读全文