从文件读取数据到链表并排序
需积分: 10 9 浏览量
更新于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("\"");
}
```
这段代码提供了从文件读取数据并创建链表、对链表进行排序以及打印链表的完整过程,对于初学者来说,是一个很好的学习链表操作的例子。
134 浏览量
1043 浏览量
326 浏览量
102 浏览量
130 浏览量
127 浏览量
1043 浏览量
281 浏览量
草根(云南文山)
- 粉丝: 0
- 资源: 1