📅  最后修改于: 2023-12-03 15:42:07.840000             🧑  作者: Mango
链表(Linked List)是一种基本数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表可以存储和操作大量数据,是编程中常用的数据结构之一。
C 语言中可以使用结构体来表示链表节点,结构体中包含了数据和指向下一个节点的指针。
struct node {
int data;
struct node *next;
};
以上代码表示一个链表节点,其中 data
是节点的数据部分,next
是一个指向下一个节点的指针。
利用结构体表示链表节点,可以通过动态分配内存的方式来创建新节点。在创建节点时,需要为其分配数据部分和指针部分的内存空间。
struct node *create_node(int data) {
struct node *new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
以上代码表示创建一个新的链表节点,并将其初始化为指定的数据和空指针。
将节点按照一定的顺序串联起来,就可以组成一个完整的链表。可以通过头节点来访问整个链表。
struct node *head = NULL;
struct node *node1 = create_node(1);
struct node *node2 = create_node(2);
struct node *node3 = create_node(3);
head = node1;
node1->next = node2;
node2->next = node3;
以上代码表示创建一个包含三个节点的链表,并将它们依次串联起来。头节点为第一个节点 node1
。
通过遍历整个链表,可以访问每个节点的数据。
struct node *current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
以上代码表示遍历链表,并打印出每个节点的数据。
链表的操作包括增加、删除和修改节点等。以下是一些常见的链表操作。
向链表中增加节点可以在头部或尾部进行操作。在头部添加节点时,需要将新节点的指针指向原头节点,并将新节点赋值为头节点。在尾部添加节点时,需要遍历整个链表,找到最后一个节点,将其指针指向新节点。
struct node *new_node = create_node(4);
// 在头部添加节点
new_node->next = head;
head = new_node;
// 在尾部添加节点
struct node *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_node;
以上代码表示在链表中分别添加一个头节点和尾节点。
删除链表中的节点可以通过遍历找到指定节点并删除。在删除节点时需要注意指针的问题,防止内存泄漏。
int delete_node(struct node *head, int data) {
struct node *prev = NULL;
struct node *current = head;
while (current != NULL && current->data != data) {
prev = current;
current = current->next;
}
if (current == NULL) {
return 0;
}
if (prev == NULL) {
head = current->next;
} else {
prev->next = current->next;
}
free(current);
return 1;
}
以上代码表示删除链表中指定的节点。
修改链表中的节点可以通过遍历找到指定节点并修改。
int update_node(struct node *head, int old_data, int new_data) {
struct node *current = head;
while (current != NULL && current->data != old_data) {
current = current->next;
}
if (current == NULL) {
return 0;
}
current->data = new_data;
return 1;
}
以上代码表示修改链表中指定的节点的数据。
链表是一种基本数据结构,可以使用结构体来表示链表节点,并用指针来串联整个链表。在创建、修改、删除节点时需要注意指针的操作,以防止内存泄漏。链表是编程中常用的数据结构之一,可以用于存储和操作大量数据。