线性表的基本操作及应用(单链表的创建,插入、删除举例
时间: 2024-12-28 16:30:07 浏览: 10
线性表是一种基础的数据结构,它由一系列元素组成,并通过链接的方式组织在一起。单链表是最简单的链式存储结构之一,每个节点包含数据域和指针域,其中指针指向下一个节点。
基本操作包括:
1. **创建(初始化)**:创建一个空的单链表,即链表头指针初始化为空。如果需要存储数据,可以动态分配内存并创建第一个节点,然后设置头指针指向这个节点。
```c++
struct ListNode {
int data;
ListNode* next;
};
ListNode* head = nullptr; // 创建空链表
```
2. **插入**:向链表中添加新节点通常分为两个步骤:
- 创建新的节点,存储数据。
- 将新节点的`next`指针指向当前链表的最后一个节点,如果链表为空,则直接将头指针指向新节点。
```c++
// 插入到头部
ListNode* newNode = new ListNode{data};
newNode->next = head;
head = newNode;
// 插入到中间或尾部
ListNode* current = head;
while (current->next != nullptr && current->next->data != target) {
current = current->next;
}
if (current->next != nullptr) {
newNode = new ListNode{data};
newNode->next = current->next;
current->next = newNode;
} else {
newNode = new ListNode{data};
newNode->next = nullptr;
current->next = newNode;
}
```
3. **删除**:移除指定节点也分两步:
- 找到要删除的节点(通过遍历查找目标值)。
- 如果找到,更新前一个节点的`next`指针,使其指向被删除节点的下一个节点;如果没有前一个节点(删除头节点),则将头指针指向下一个节点。
```c++
// 删除头部节点
if (head != nullptr && head->data == target) {
ListNode* temp = head;
head = head->next;
delete temp;
}
// 删除其他位置的节点
ListNode* current = head;
while (current != nullptr && current->data != target) {
current = current->next;
}
if (current != nullptr) {
current->prev->next = current->next;
delete current;
}
```
应用方面,单链表常用于需要频繁插入和删除操作的地方,如实现栈、队列等数据结构,或者作为算法中的临时存储结构。同时,由于其不支持随机访问,对于大规模数据集,查找效率相对较低。
阅读全文