C语言链表实现
链表是一种常见的数据结构,它由一系列节点组成,每个节点包含两部分:数据和指向下一个节点的指针,链表的主要优点是它可以动态地添加和删除元素,而不需要预先知道链表的大小,在C语言中,我们可以使用结构体和指针来实现链表。
我们需要定义一个链表节点的结构体,这个结构体通常包含两个部分:数据和指向下一个节点的指针,我们可以定义一个名为“Node”的结构体,它有一个整型的数据字段和一个指向下一个Node的指针字段。
struct Node { int data; struct Node* next; };
我们可以定义一个函数来创建一个新的链表节点,这个函数接受一个整数作为参数,并返回一个新的Node。
struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; }
接下来,我们可以定义一个函数来向链表中添加新的节点,这个函数接受一个Node和一个整数作为参数,它将新的节点添加到链表的末尾。
void addNode(struct Node** head, int data) { struct Node* newNode = createNode(data); if (*head == NULL) { *head = newNode; return; } struct Node* last = *head; while (last->next != NULL) { last = last->next; } last->next = newNode; }
我们还需要一个函数来从链表中删除节点,这个函数接受一个Node和一个整数作为参数,它将删除链表中所有值等于给定整数的节点。
void deleteNode(struct Node** head, int data) { struct 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; prev->next = temp->next; free(temp); }
我们可以定义一个函数来打印链表中的所有元素,这个函数接受一个Node作为参数,它将遍历链表并打印出每个节点的数据。
void printList(struct Node* node) { while (node != NULL) { printf("%d ", node->data); node = node->next; } }
以上就是C语言链表的基本实现,通过这些函数,我们可以创建、修改和打印链表。
还没有评论,来说两句吧...