设有一顺序表A=(a0,a1,..., ai,...an-1),其逆顺序表定义为A'=( an-1,..., ai,...,a1, a0)。设计一个算法, 将顺序表逆置,要求顺序表仍占用原顺序表的空间。使用C语言生成代码
时间: 2024-09-26 07:04:13 浏览: 55
为了将顺序表逆置而不改变原空间,可以使用两个指针,一个指向表头(prev),另一个指向表尾(curr)。每次迭代,我们将当前元素`ai`与`prev`指向的元素交换,然后移动`prev`向前一位,直到`prev`与`curr`相遇。以下是使用C语言实现这个算法的一个简单版本:
```c
#include <stdio.h>
void reverseList(int* A, int n) {
if (n == 0 || n == 1) return; // 如果列表为空或只有一个元素,无需操作
int prev = 0;
int curr = n - 1;
while (prev < curr) { // 当前元素还未到达表头
int temp = A[prev]; // 临时保存当前元素
A[prev] = A[curr]; // 将当前元素移到前面
A[curr] = temp; // 将之前的位置放回原值
prev++; // 移动到下一个元素
curr--; // 移动到前一个元素
}
}
// 示例
int main() {
int A[] = {1, 2, 3, 4, 5};
int n = sizeof(A) / sizeof(A[0]);
printf("Original list: ");
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
reverseList(A, n);
printf("\nReversed list: ");
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
return 0;
}
```
运行上述程序,你会看到原始列表和逆序后的列表。注意,这里假设`A`是一个数组,实际项目中可能需要考虑动态分配内存的情况。
阅读全文