上一篇
c语言链表怎么定义
- 行业动态
- 2024-04-04
- 2
C语言链表是一种常见的数据结构,它由一系列节点组成,每个节点包含两部分:数据和指向下一个节点的指针,链表的第一个节点称为头节点,最后一个节点的指针指向NULL,表示链表的结束,链表具有动态分配内存、插入和删除方便等优点,但同时也存在一定的空间浪费和访问效率较低的问题。
在C语言中,我们可以使用结构体(struct)来定义链表的节点,然后通过指针将各个节点连接起来,下面是一个简单的链表定义示例:
#include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct Node { int data; // 节点存储的数据 struct Node *next; // 指向下一个节点的指针 } Node; // 创建新节点的函数 Node *createNode(int data) { Node *newNode = (Node *)malloc(sizeof(Node)); newNode>data = data; newNode>next = NULL; return newNode; } // 向链表中添加节点的函数 void addNode(Node **head, int data) { Node *newNode = createNode(data); if (*head == NULL) { *head = newNode; // 如果链表为空,将新节点设为头节点 } else { Node *temp = *head; // 从头节点开始遍历链表 while (temp>next != NULL) { temp = temp>next; // 寻找链表的末尾 } temp>next = newNode; // 将新节点添加到链表末尾 } } // 删除链表中指定数据的节点的函数 void deleteNode(Node **head, int data) { Node *temp = *head, *prev; // 从头节点开始遍历链表,同时记录前一个节点 if (temp != NULL && temp>data == data) { // 如果头节点就是要删除的节点 *head = temp>next; // 将头节点改为下一个节点 free(temp); // 释放原头节点的内存 return; } while (temp != NULL && temp>data != data) { // 如果找到了要删除的节点,或者遍历到了链表末尾 prev = temp; // 记录当前节点的前一个节点 temp = temp>next; // 继续遍历下一个节点 } if (temp == NULL) { // 如果遍历到了链表末尾,说明没有找到要删除的节点,直接返回即可 return; } else { // 如果找到了要删除的节点,将其从链表中移除,并释放内存 prev>next = temp>next; free(temp); } }
以上代码实现了一个简单的单链表,包括创建新节点、向链表中添加节点和删除链表中指定数据的节点等基本操作,接下来,我们可以通过这些基本操作来实现一些其他功能,例如遍历链表、查找节点、修改节点数据等。
1、遍历链表:我们可以使用递归或循环的方式来遍历链表,以下是一个简单的递归遍历链表的示例:
void traverseList(Node *node) { if (node == NULL) { // 如果当前节点为空,表示已经遍历到链表末尾,直接返回即可 return; } else { // 如果当前节点不为空,先打印当前节点的数据,然后递归遍历下一个节点 printf("%d ", node>data); traverseList(node>next); } }
2、查找节点:我们可以从头节点开始遍历链表,直到找到指定数据的节点或遍历到链表末尾,以下是一个简单的查找节点的示例:
Node *findNode(Node *head, int data) { Node *temp = head; // 从头节点开始遍历链表 while (temp != NULL) { // 如果当前节点不为空且数据匹配,表示找到了要查找的节点,返回该节点的指针;否则继续遍历下一个节点 if (temp>data == data) { return temp; } else { temp = temp>next; } } return NULL; // 如果遍历到了链表末尾都没有找到要查找的节点,返回NULL表示未找到 }
3、修改节点数据:我们可以通过查找到指定数据的节点,然后修改其数据字段的值来实现,以下是一个简单的修改节点数据的示例:
void modifyNodeData(Node *head, int oldData, int newData) { Node *node = findNode(head, oldData); // 查找指定数据的节点,如果找到了就修改其数据字段的值;否则不进行任何操作(因为找不到指定的数据) if (node != NULL) { node>data = newData; // 修改节点数据字段的值(如果找到了指定的数据) } else { // 如果找不到指定的数据,可以输出一条提示信息(可选) printf("未找到指定数据:%d ", oldData); } }
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/304127.html