C语言实现单链表:详细分析与示例
160 浏览量
更新于2024-09-02
收藏 43KB PDF 举报
"C语言单链表的创建与操作示例"
在C语言中,数据结构是编程中的一个重要组成部分,而链表作为一种动态数据结构,它允许高效地插入和删除元素,尤其是在内存空间不连续的情况下。单链表是最基础的链表类型,每个节点包含数据元素和指向下一个节点的指针。本文将详细介绍C语言中如何实现单链表,并提供正序创建和倒序创建链表的示例。
首先,我们需要定义单链表的节点结构体。在给定的代码中,定义了一个名为`TYPE`的结构体,包含一个整型变量`num`用于存储数据,以及一个指向`TYPE`类型的指针`next`,用来链接下一个节点:
```c
typedef struct type {
int num;
struct type* next;
} TYPE;
```
接下来,我们分别看两个函数`init_link_head`和`init_link_end`,它们用于创建不同顺序的链表。
1. `init_link_head(int n)` 函数:
此函数实现了从头到尾,正序创建一个具有`n`个节点的链表。首先,它分配一个空的头节点`phead`,然后通过一个循环来依次输入`n`个节点的值。每次循环,都会创建一个新的节点`pi`,读取用户输入的数值,并将其赋给`num`。如果当前是第一个节点,`phead`和`pf`(前一个节点指针)都指向`pi`;否则,`pf->next`指向`pi`,并将`pf`更新为`pi`。最后,新创建的节点的`next`指针设为`NULL`,表示链表结束。当所有节点创建完毕后,返回链表的头指针`phead`。
```c
TYPE* init_link_head(int n) {
int i;
TYPE *phead = NULL, *pf = NULL, *pi = NULL;
for (i = 0; i < n; i++) {
pi = (TYPE*)malloc(sizeof(TYPE));
printf("请输入第 %d 个节点的数值:\n", i + 1);
scanf("%d", &pi->num);
if (i == 0)
pf = phead = pi;
else {
pf->next = pi;
pf = pi;
}
pi->next = NULL;
}
return phead;
}
```
2. `init_link_end(int n)` 函数:
这个函数则是从尾到头,倒序创建一个具有`n`个节点的链表。与`init_link_head`不同,这里我们需要先创建所有节点,然后再将它们按倒序连接。首先,分配一个空的头节点`phead`,然后通过循环创建`n`个节点,每个节点的`next`指针均设为`NULL`。在循环结束后,再通过一个反向的循环将这些节点按倒序连接起来。最后,返回链表的头指针`phead`。
```c
TYPE* init_link_end(int n) {
TYPE *phead = NULL, *pi = NULL, *temp = NULL;
for (int i = 0; i < n; i++) {
pi = (TYPE*)malloc(sizeof(TYPE));
printf("请输入第 %d 个节点的数值:\n", n - i);
scanf("%d", &pi->num);
pi->next = NULL;
if (i == 0)
phead = pi;
else {
temp->next = pi;
}
temp = pi;
}
return phead;
}
```
这两个函数为单链表的创建提供了基本框架,但实际应用中,链表还需要支持其他操作,如查找、插入、删除等。为了操作链表,我们可以编写更多的辅助函数,如`display_link_list`显示链表内容,`insert_node`在特定位置插入节点,`delete_node`删除指定节点等。了解这些基础操作后,你可以根据需求进一步扩展单链表的功能。
2009-05-19 上传
2020-08-27 上传
2024-09-19 上传
2020-09-04 上传
2012-11-07 上传
2024-03-15 上传
2024-09-19 上传
2023-10-20 上传
2023-10-23 上传
weixin_38614484
- 粉丝: 0
- 资源: 874
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜