C语言实现分别用顺序存储和链式存储实现线性表的倒置,要去用最少的附加存储空间来完成
时间: 2024-10-07 18:02:35 浏览: 39
数据结构与算法(C语言)线性表(顺序存储、链式存储) 定义线性表节点的结构.pdf
在C语言中,倒置顺序存储的线性表(数组)通常需要原地操作,因为我们需要直接修改原始元素的位置,而不需要额外的空间。一种常见的方法是通过两个指针i和j,初始时i指向第一个元素,j指向最后一个元素,然后交换它们,然后i向前移动一位,j向后移动一位,直到i >= j。
```c
void reverse_array(int arr[], int size) {
int i = 0, j = size - 1;
while (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
```
对于链式存储(动态数组),由于每个节点包含一个指向下一个节点的指针,我们可以在遍历链表的同时,改变节点的next指针方向来实现倒置。这种方法同样不需要额外的空间:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
void reverse_list(Node** head) {
if (*head == NULL || (*head)->next == NULL) return; // 如果链表为空或只有一个元素
Node* prev = NULL;
Node* current = *head;
Node* next暂存;
while (current != NULL) {
next暂存 = current->next;
current->next = prev;
prev = current;
current = next暂存;
}
*head = prev; // 更新头指针
}
```
阅读全文