自定义链表实现:创建、插入与排序

需积分: 9 1 下载量 61 浏览量 更新于2024-09-14 收藏 105KB DOCX 举报
"这篇资源提供了一段自编的链表实现代码,包括链表节点的定义、链表的创建、元素的显示以及插入功能。代码使用C语言编写,并且具有错误检查功能。" 在这段代码中,作者首先定义了一个结构体`struct node`来表示链表中的节点,每个节点包含一个整型`id`(用于存储数据)和一个指向下一个节点的指针`next`。`sort_flag`是一个全局变量,用于标记链表是否已经排序,如果为0则表示未排序。 `MallocNode`函数用于动态分配内存并创建新的节点。在分配内存失败时,它会输出错误信息。成功创建节点后,程序会提示用户输入节点的`id`值,并将`next`指针设置为`NULL`。 `Create`函数用于创建链表。它接受两个参数:一个整数`n`表示要创建的节点数量,以及一个`HEAD`指针表示链表头。如果链表头非空,函数会返回错误信息,表示链表已存在。否则,它会按照用户输入的节点数量创建一个新的链表,并返回链表头。 `Show`函数用来显示链表中的所有元素。如果链表为空,它会输出相应的错误信息;否则,它会按顺序遍历并打印出每个节点的`id`,除了最后一个节点,其后不跟箭头。 `Insert`函数用于在链表中插入一个新节点。它接受两个参数:一个新节点`new`和链表头`Head`。如果链表为空,函数会返回错误信息。如果`sort_flag`为0,表示链表未排序,无法进行插入操作。如果链表已排序,函数会在找到合适位置时将新节点插入到链表中。然而,代码在比较新节点与链表中节点的`id`时,可能存在一个拼写错误:`if((new->id<=p->i`,这里的`i`应该是`id`。 这段代码提供了一个基础的链表操作框架,但需要注意的是,它没有实现对链表的排序功能。此外,`Insert`函数仅适用于已排序的链表,对于未排序链表的插入操作没有处理。为了完善这个链表,可以添加更多的功能,如删除节点、查找节点、排序等。同时,对于插入操作,可以考虑实现一个通用的插入方法,不论链表是否已排序。