C语言实现单链表:详细分析与示例

0 下载量 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`删除指定节点等。了解这些基础操作后,你可以根据需求进一步扩展单链表的功能。