试分别以顺序表和单链表作存储结构,各写一实现线性表就地逆置的算法。
时间: 2024-10-18 07:13:30 浏览: 47
数据结构(Java语言描述) 案例01 顺序表的就地逆置.docx
在C++中,线性表(如数组或链表)的逆置可以通过几种方式实现,具体取决于所使用的存储结构。这里我会分别介绍使用顺序表(数组)和单链表的逆置算法。
**顺序表(数组)逆置算法**:
```cpp
#include <iostream>
// 假设我们有一个整型数组
template <typename T, size_t N>
void reverseArray(T(&arr)[N]) {
for (size_t i = 0; i < N / 2; ++i) {
std::swap(arr[i], arr[N - i - 1]);
}
}
int main() {
int seqList[] = {1, 2, 3, 4, 5};
const size_t len = sizeof(seqList) / sizeof(seqList[0]);
// 逆置数组
reverseArray(seqList, len);
for (size_t i = 0; i < len; ++i) {
std::cout << seqList[i] << " ";
}
return 0;
}
```
**单链表逆置算法**:
```cpp
#include <iostream>
struct Node {
int data;
Node* next;
};
// 链表逆置
Node* reverseLinkedList(Node* head) {
if (!head || !head->next) {
return head;
}
Node* prev = nullptr, *current = head, *nextTemp = nullptr;
while (current) {
nextTemp = current->next;
current->next = prev;
prev = current;
current = nextTemp;
}
return prev;
}
int main() {
// 假设我们有一个单链表节点结构
Node list[] = {1, 2, 3, 4, 5};
Node* head = list;
// 逆置链表
head = reverseLinkedList(head);
// 打印逆置后的链表
while (head) {
std::cout << head->data << " ";
head = head->next;
}
return 0;
}
```
阅读全文