从文件读取数据到链表并排序

需积分: 10 10 下载量 133 浏览量 更新于2024-09-08 1 收藏 2KB TXT 举报
"初学者可以学习如何将文件内容读入链表。这个教程涵盖了创建链表、从文件读取数据以及对链表进行排序的基本步骤。" 在这个程序中,我们主要涉及了以下几个知识点: 1. **链表结构**:首先定义了一个`struct node`来表示链表节点,它包含两个成员,一个是`data`用于存储元素(这里假设是整数),另一个是`next`指针,指向下一个节点。 ```c struct node{ int data; // element type 表示一个单链表节点,可以是int或char类型 struct node* next; // next 指向下一个链表节点 }; ``` 2. **链表创建**:`Creat()`函数用于创建链表,并从文件中读取数据。这里首先分配一个头节点`head`,然后通过循环从文件`"c:\\a.txt"`中读取数据(使用`fscanf()`函数),每次读取一个整数并创建一个新的节点,将其添加到链表中。最后返回头节点。 ```c node* Creat() { ... FILE* fp = fopen("c:\\a.txt", "r"); if (fp == NULL) { printf("文件打开失败!"); return NULL; } while (fscanf(fp, "%d", &t) != EOF) { ... } ... } ``` 3. **链表排序**:`sort()`函数实现了链表的冒泡排序,通过两次遍历来交换相邻的逆序节点。第一遍遍历找到最大的元素放到链表末尾,第二遍遍历找到次大的元素放到倒数第二个位置,以此类推,直到整个链表有序。 ```c node* sort(node* head) { node* pfirst = NULL, * pend = NULL; pfirst = head; while (pfirst != pend) { ... } return head; } ``` 4. **链表打印**:`List()`函数用于打印链表中的所有元素,通过遍历链表并使用`printf()`函数显示每个节点的数据。 ```c void List(node* head) { node* p1; p1 = head; while (p1 != NULL) { printf("%4d", p1->data); p1 = p1->next; } } ``` 5. **主函数**:`main()`函数是程序的入口点,它调用了上述所有功能。首先调用`Creat()`创建链表,然后打印原始链表,接着调用`sort()`对链表进行排序,最后再次打印排序后的链表。 ```c int main() { node* head; printf("Enter the number of linked list nodes:\n"); head = Creat(); printf("List:\n"); List(head); head = sort(head); printf("\n\n"); List(head); printf("\""); } ``` 这段代码提供了从文件读取数据并创建链表、对链表进行排序以及打印链表的完整过程,对于初学者来说,是一个很好的学习链表操作的例子。