C语言实现单链表:创建、打印、插入与删除操作
需积分: 10 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("删除后链表为=");
}
```
以上代码提供了一个基本的单链表操作框架,包括创建、打印、插入和删除节点的功能。实际应用中,可能需要考虑错误处理和内存管理的细节,例如检查输入有效性、处理空链表等。
2011-12-05 上传
2023-03-22 上传
2024-10-18 上传
2023-06-13 上传
2023-03-27 上传
2023-05-25 上传
2024-09-14 上传
Matrix_Dev
- 粉丝: 3
- 资源: 4
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章