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语言链表的基本实现,通过这些函数,我们可以创建、修改和打印链表。



还没有评论,来说两句吧...