二级C语言考试上机题解:链表排序

需积分: 9 2 下载量 165 浏览量 更新于2024-07-21 收藏 48KB DOCX 举报
"该资源为全国计算机考试二级C语言的上机操作题库,特别是针对排序问题的程序填空题目,旨在帮助考生熟悉C语言实现链表排序的代码编写。" 在C语言中,链表是一种重要的数据结构,用于存储一系列元素。在给定的程序中,函数`fun`被设计用来对单向链表中的节点数据进行排序,从最小到最大。链表的每个节点由结构体`NODE`定义,包含一个整型数据`data`和指向下一个节点的指针`next`。 程序的核心部分是`fun`函数,它使用了冒泡排序的思路,通过两个指针`p`和`q`遍历链表。`p`始终指向当前未排序部分的头节点,而`q`则用于在未排序部分内部进行比较。如果`p->data`大于`q->data`,则交换两节点的值,使得较大的值向后移动。 在给定的代码中,需要填充以下下划线处的内容: 1. `p=__1__;` 这里应初始化`p`为链表的头节点,即`h->next`。 2. `q=__2__;` 在每次外层循环中,`q`应初始化为`p`的下一个节点,即`p->next`。 3. `if(p->data__3__q->data)` 这里应该填写比较操作符,因为我们要判断`p->data`是否大于`q->data`。 完整的代码填充如下: ```c void fun(NODE* h) { NODE* p = h->next; // 初始化p为头节点 while (p) { NODE* q = p->next; // 初始化q为p的下一个节点 while (q) { if (p->data > q->data) // 比较p和q的data { t = p->data; p->data = q->data; q->data = t; } q = q->next; // 移动q到下一个节点 } p = p->next; // 移动p到下一个节点 } } ``` 此外,程序还包含了两个辅助函数: 1. `creatlist`函数用于根据给定的数组创建链表。它接受一个整型数组`a`,并返回新创建的链表头节点。 2. `outlist`函数用于打印链表的所有元素,从头到尾,并在末尾添加"->End"表示链表结束。 在`main`函数中,首先创建了一个包含数字0、10、4、2、8、6的链表,然后调用`outlist`函数打印原始链表,最后调用`fun`函数对链表进行排序,再次调用`outlist`函数展示排序后的链表。这样的练习有助于考生理解和掌握C语言处理链表排序的技巧。