数据结构链表,结点的结构体定义以及增删改查的实现
发布人:shili8
发布时间:2025-01-22 16:24
阅读次数:0
**链表数据结构**
链表是一种常见的线性数据结构,它由一系列的结点组成,每个结点包含一个值和一个指向下一个结点的引用。链表可以用于实现各种数据结构,如栈、队列、图等。
### 结点的结构体定义
ctypedef struct Node { int data; // 结点中的数据 struct Node* next; // 指向下一个结点的指针} Node;
在这个例子中,我们定义了一个名为 `Node` 的结构体,包含两个成员变量:`data` 和 `next`。其中,`data` 用于存储结点中的数据,而 `next` 则用于指向下一个结点。
### 链表的基本操作链表支持以下几个基本操作:
* **插入**: 在链表中插入一个新结点。
* **删除**: 从链表中删除一个结点。
* **修改**: 修改链表中的某个结点的值。
* **查找**: 根据给定的条件在链表中查找特定结点。
### 插入操作
cvoid insert(Node** head, int data) { Node* newNode = (Node*)malloc(sizeof(Node)); if (!newNode) { printf("Memory error "); return; } newNode->data = data; newNode->next = *head; *head = newNode; }
在这个例子中,我们定义了一个函数 `insert`,用于在链表的头部插入一个新结点。我们首先分配一个新的结点,并将其数据设置为给定的值,然后将该结点的指针设为当前链表的头部。
### 删除操作
cvoid delete(Node** head, int data) { if (*head == NULL) return; if ((*head)->data == data) { Node* temp = *head; *head = (*head)->next; free(temp); return; } Node* prev = *head; Node* curr = *head->next; while (curr != NULL) { if (curr->data == data) { prev->next = curr->next; free(curr); return; } prev = curr; curr = curr->next; } }
在这个例子中,我们定义了一个函数 `delete`,用于从链表中删除一个结点。我们首先检查链表是否为空,如果是,则直接返回。如果链表的头部结点的值等于要删除的值,则直接将链表的头部设为下一个结点,并释放当前结点。
如果链表的头部结点的值不等于要删除的值,则我们从链表的第二个结点开始遍历,直到找到要删除的结点。然后,我们将该结点的前驱结点的 `next` 指针设为该结点的下一个结点,并释放当前结点。
### 修改操作
cvoid modify(Node** head, int data, int newData) { if (*head == NULL) return; if ((*head)->data == data) { (*head)->data = newData; return; } Node* curr = *head->next; while (curr != NULL) { if (curr->data == data) { curr->data = newData; return; } curr = curr->next; } }
在这个例子中,我们定义了一个函数 `modify`,用于修改链表中的某个结点的值。我们首先检查链表是否为空,如果是,则直接返回。如果链表的头部结点的值等于要修改的值,则直接将该结点的数据设置为新值。
如果链表的头部结点的值不等于要修改的值,则我们从链表的第二个结点开始遍历,直到找到要修改的结点。然后,我们将该结点的数据设置为新值。
### 查找操作
cNode* search(Node* head, int data) { while (head != NULL) { if (head->data == data) return head; head = head->next; } return NULL; }
在这个例子中,我们定义了一个函数 `search`,用于根据给定的条件在链表中查找特定结点。我们从链表的头部开始遍历,直到找到要查找的结点或链表结束。
### 总结链表是一种常见的线性数据结构,它由一系列的结点组成,每个结点包含一个值和一个指向下一个结点的引用。链表支持基本操作如插入、删除、修改和查找,可以用于实现各种数据结构,如栈、队列、图等。
在这个例子中,我们定义了链表的结点结构体,实现了链表的基本操作,并提供了示例代码和注释。