第一百零六天学习记录:数据结构与算法基础:单链表(王卓教学视频)
发布人:shili8
发布时间:2024-11-19 10:25
阅读次数:0
**第一百零六天学习记录**
**数据结构与算法基础:单链表**
**王卓教学视频**
今天是我们学习的第106 天,主题是单链表。单链表是一种常见的线性数据结构,它们通过指针连接起来,每个结点包含一个值和一个指向下一个结点的指针。
### 单链表定义
ctypedef struct Node {
int data;
struct Node* next;
} Node;
在上面的代码中,我们定义了一个 `Node` 结构体,包含两个成员变量:`data` 和 `next`。其中,`data` 是结点的值,而 `next` 是指向下一个结点的指针。
### 单链表操作单链表支持以下基本操作:
* **插入**:在链表中插入一个新结点。
* **删除**:从链表中删除一个结点。
* **查找**:根据值找到链表中的某个结点。
* **遍历**:按照链表的顺序访问所有结点。
### 单链表实现下面是单链表的基本实现:
ctypedef struct Node {
int data;
struct Node* next;
} Node;
// 创建一个新结点Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory error
");
return NULL;
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 插入结点void insertNode(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
// 删除结点void deleteNode(Node** head, int data) {
if (*head == NULL) return;
// 如果删除的结点是头结点 if ((*head)->data == data) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
Node* current = *head;
while (current->next != NULL) {
if (current->next->data == data) {
Node* temp = current->next;
current->next = current->next->next;
free(temp);
return;
}
current = current->next;
}
}
// 查找结点Node* findNode(Node* head, int data) {
while (head != NULL) {
if (head->data == data) {
return head;
}
head = head->next;
}
return NULL;
}
// 遍历链表void traverseList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("
");
}
在上面的代码中,我们实现了单链表的基本操作,包括插入、删除、查找和遍历。
### 单链表应用单链表有很多实际应用:
* **缓存管理**:单链表可以用来管理缓存中的数据。
* **浏览器历史记录**:单链表可以用来保存浏览器的历史记录。
* **文件系统**:单链表可以用来组织文件系统中的文件。
### 总结本文介绍了单链表的基本概念、定义和实现。我们讨论了单链表支持的基本操作,包括插入、删除、查找和遍历。最后,我们看到了单链表在实际应用中的重要性。
**参考资料**
* 《数据结构与算法基础》王卓* 《C语言程序设计》周志明

