C语言实现单链表:创建、打印、插入与删除操作

需积分: 10 3 下载量 159 浏览量 更新于2024-09-13 收藏 3KB TXT 举报
该文件是关于单链表数据结构的操作教程,包括创建、打印、插入和删除节点的函数实现。 单链表是一种基础的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个节点的指针。在C语言中,我们可以使用结构体来定义单链表的节点类型。以下是一个简单的单链表节点定义: ```c typedef struct LNode{ int data; struct LNode* next; } LNode, *LinkList; ``` 这里,`LNode` 结构体包含了两个成员:`data` 用于存储数据,`next` 是一个指向下一个节点的指针。`LinkList` 是一个指向 `LNode` 的指针,通常用于操作链表。 创建单链表的函数 `LinkListCreat_LinkList()` 首先分配一个头节点,然后通过用户输入的整数序列构建链表。当用户输入-1时,表示输入结束。函数最后返回链表的头节点,并打印出创建的链表。 ```c LinkList Creat_LinkList() { LinkList head, p, rear; // 初始化头节点、尾节点和临时节点 head = (LinkList)malloc(sizeof(LNode)); rear = head; int x; printf("请输入整数序列,以-1结束\n"); scanf("%d", &x); while (x != -1) { // 当输入不为-1时,继续添加节点 p = (LinkList)malloc(sizeof(LNode)); p->data = x; rear->next = p; rear = p; scanf("%d", &x); } rear->next = NULL; // 将尾节点的next设为NULL,表示链表结束 printf("创建的链表为="); return head; } ``` 打印链表的函数 `print()` 使用一个指针 `p` 从头节点开始遍历链表,逐个打印节点中的数据。 ```c void print(LinkList head) { LinkList p; p = head; while (p) { // 遍历链表直到p为空 printf("%d", p->data); p = p->next; // 移动到下一个节点 } printf("\n"); } ``` 插入节点的函数 `LinkListInsert_LinkList()` 需要用户提供插入位置的索引 `i` 和要插入的元素值 `e`。函数会找到插入位置并创建新的节点,将新节点插入到链表中。 ```c LinkList Insert_LinkList(LinkList head) { LinkList p, s; int j = 0, i, e; printf("请输入插入位置i和元素值e:\n"); scanf("%d", &i); scanf("%d", &e); p = head; while (p && j < i - 1) { // 找到插入位置 p = p->next; ++j; } if (!p || j > i - 1) { printf("插入位置无效,索引超范围\n"); } else { s = (LinkList)malloc(sizeof(LNode)); s->data = e; s->next = p->next; p->next = s; } printf("插入后链表为="); } ``` 删除节点的函数 `LinkListDelete_LinkList()` 同样需要用户提供要删除的节点位置 `i`。函数找到指定位置的节点,并将其删除。 ```c LinkList Delete_LinkList(LinkList head) { LinkList p, q; int j = 0, i, e; printf("请输入要删除的节点位置i:\n"); scanf("%d", &i); p = head; while (p && j < i - 1) { // 找到要删除的节点前一个位置 p = p->next; ++j; } if (!p || j > i - 1) { printf("删除位置无效,索引超范围\n"); } else { q = p->next; // 保存要删除的节点 p->next = q->next; // 将q从链表中删除 free(q); // 释放内存 } printf("删除后链表为="); } ``` 以上代码提供了一个基本的单链表操作框架,包括创建、打印、插入和删除节点的功能。实际应用中,可能需要考虑错误处理和内存管理的细节,例如检查输入有效性、处理空链表等。