数据结构c++设计一个单链表的基本操作的演示程序。初始化单链表,生成单链表,遍历线性表,在第i个元素前插入元素e,删除第i个元素,将单链表逆置
时间: 2024-11-09 21:20:00 浏览: 26
在C++中,我们可以创建一个简单的单链表类来演示基本操作。下面是一个包含基本功能的单链表结构以及示例代码:
```cpp
#include <iostream>
// 定义节点结构体
struct Node {
int data;
Node* next;
Node(int value) : data(value), next(nullptr) {}
};
// 单链表类
class LinkedList {
private:
Node* head; // 链表头指针
public:
// 初始化空链表
LinkedList() : head(nullptr) {}
// 添加新元素到链表末尾
void append(int value) {
if (head == nullptr) {
head = new Node(value);
} else {
Node* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = new Node(value);
}
}
// 遍历链表并打印元素
void traverse() const {
Node* temp = head;
while (temp != nullptr) {
std::cout << temp->data << " ";
temp = temp->next;
}
std::cout << "\n";
}
// 在第i个位置插入元素e
void insertAt(int i, int e) {
if (i <= 0 || i > size()) {
std::cerr << "Invalid index\n";
return;
}
Node* newNode = new Node(e);
if (i == 1) { // 插入在头部
newNode->next = head;
head = newNode;
} else {
Node* prev = head;
for (int j = 1; j < i - 1; ++j) {
prev = prev->next;
}
newNode->next = prev->next;
prev->next = newNode;
}
}
// 删除第i个元素
void removeAt(int i) {
if (i <= 0 || i > size()) {
std::cerr << "Invalid index\n";
return;
}
if (i == 1) { // 删除头部
head = head->next;
} else {
Node* prev = head;
for (int j = 1; j < i - 1; ++j) {
prev = prev->next;
}
prev->next = prev->next->next;
}
}
// 计算链表大小
int size() const {
int count = 0;
Node* temp = head;
while (temp != nullptr) {
count++;
temp = temp->next;
}
return count;
}
// 逆置链表
void reverse() {
if (head == nullptr || head->next == nullptr) {
return;
}
Node* prev = nullptr;
Node* curr = head;
Node* nextTemp = nullptr;
while (curr != nullptr) {
nextTemp = curr->next;
curr->next = prev;
prev = curr;
curr = nextTemp;
}
head = prev;
}
};
int main() {
LinkedList list;
list.append(1);
list.append(2);
list.append(3);
list.traverse(); // 输出: 1 2 3
list.insertAt(2, 4); // 在第二个位置插入4
list.traverse(); // 输出: 1 2 4 3
list.removeAt(2); // 删除第三个位置的元素
list.traverse(); // 输出: 1 2 3
list.reverse(); // 逆置链表
list.traverse(); // 输出: 3 2 1
return 0;
}
```
在这个例子中,我们首先创建了一个`LinkedList`类,并实现了添加、遍历、插入、删除和逆置等基本操作。在`main`函数中,我们演示了如何使用这些方法来操作一个实例化的链表。
阅读全文