在学习C语言链表之前,你可能已经熟悉了数组。但数组有固定大小、插入删除效率低等缺点。而链表是一种动态数据结构,可以灵活地管理内存,是学习更复杂C语言数据结构的重要基础。
链表是由一系列“节点”(Node)组成的线性结构。每个节点包含两部分:
我们以最简单的单向链表为例。首先定义一个结构体来表示节点:
struct Node { int data; // 数据域 struct Node* next; // 指针域,指向下一个节点}; 这个结构体就是我们构建链表基础教程的核心。通过 next 指针,我们可以把多个节点“串”起来。
要向链表中添加数据,首先需要创建一个新节点。通常我们会写一个函数来完成这个任务:
#include <stdio.h>#include <stdlib.h>struct Node { int data; struct Node* next;};// 创建新节点的函数struct Node* createNode(int value) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); if (newNode == NULL) { printf("内存分配失败!\n"); return NULL; } newNode->data = value; newNode->next = NULL; // 新节点的 next 指向 NULL return newNode;} 最常见的操作之一是将新节点插入到链表的开头(头插法):
// 头插法:在链表头部插入新节点void insertAtHead(struct Node** head, int value) { struct Node* newNode = createNode(value); if (newNode == NULL) return; newNode->next = *head; // 新节点指向原来的头节点 *head = newNode; // 更新头指针} 注意这里使用了二级指针 struct Node** head,因为我们需要修改主函数中的 head 指针本身。
要查看链表中的所有数据,我们需要从头节点开始,依次访问每个节点:
// 打印整个链表void printList(struct Node* head) { struct Node* current = head; while (current != NULL) { printf("%d -> ", current->data); current = current->next; } printf("NULL\n");} int main() { struct Node* head = NULL; // 初始化空链表 insertAtHead(&head, 10); insertAtHead(&head, 20); insertAtHead(&head, 30); printList(head); // 输出:30 -> 20 -> 10 -> NULL return 0;} 掌握C语言链表不仅是面试常考内容,更是理解栈、队列、图等高级数据结构的基础。相比数组,链表具有以下优势:
本文带你从零开始了解了单向链表实现的基本概念和代码编写方法。通过定义节点结构、创建节点、插入节点和遍历链表,你已经掌握了链表的核心操作。接下来可以尝试实现尾部插入、按值查找、删除节点等功能,进一步巩固你的C语言数据结构知识。
提示:记得在程序结束前释放链表占用的内存,避免内存泄漏!
本文由主机测评网于2025-12-06发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123928.html