线性表的链式存储结构——链表及其操作主函数怎么写
时间: 2024-10-18 10:11:31 浏览: 31
数据结构实验——线性表的插入、删除.docx
链表是一种数据结构,它通过链接节点而不是连续的内存地址来存储元素。每个节点包含两个部分:一个是存储数据的数据域,另一个是指向下一个节点的指针域。链表的操作通常涉及创建、插入、删除节点以及遍历列表等。
对于链表的基本操作,你可以创建一个名为`LinkedList`或`ListManager`的主函数,例如在C++中:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct Node {
int data; // 节点存储的数据
Node* next; // 指向下一个节点的指针
};
// 创建新的链表节点
Node* createNode(int value) {
Node* newNode = new Node();
if (newNode != nullptr) {
newNode->data = value;
newNode->next = nullptr;
}
return newNode;
}
// 插入节点到链表
void insertNode(Node** head, int value, int position) {
if (*head == nullptr) {
*head = createNode(value);
} else {
Node* newNode = createNode(value);
Node* current = *head;
for (int i = 0; i < position - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current != nullptr) {
newNode->next = current->next;
current->next = newNode;
}
}
}
// 删除节点
void deleteNode(Node** head, int value) {
if (*head != nullptr && (*head)->data == value) {
Node* temp = *head;
*head = (*head)->next;
delete temp;
} else {
Node* current = *head, *prev = nullptr;
while (current != nullptr && current->data != value) {
prev = current;
current = current->next;
}
if (current != nullptr) {
prev->next = current->next;
delete current;
}
}
}
// 遍历并打印链表
void printList(Node* head) {
if (head != nullptr) {
while (head != nullptr) {
cout << head->data << " ";
head = head->next;
}
cout << endl;
} else {
cout << "链表为空" << endl;
}
}
int main() {
Node* head = nullptr;
// 示例操作:插入节点、打印链表、删除节点
insertNode(&head, 1, 0); // 在开头插入1
insertNode(&head, 2, 1); // 在第二个位置插入2
printList(head); // 输出:1 2
deleteNode(&head, 2); // 删除值为2的节点
printList(head); // 输出:1
return 0;
}
```
这个例子展示了基本的链表操作,包括创建链表、插入节点、删除节点以及打印链表内容。当然,这只是一个简化版本,实际应用中可能会有更复杂的需求,比如处理动态大小的链表等。记得在使用完链表后释放内存,避免内存泄漏。
阅读全文