从键盘输入一个链表(整数,输入-1截止),排序后以二进制方式保存到文件a.bf中,然后从文件从读出,输出到屏幕上。
#include <stdio.h>
#include <stdlib.h>
struct Node{
int data;
struct Node *next;
};
int main(){
FILE *fp;
int num,i,j,temp,nums[50];
struct Node* List = (struct Node*)malloc(sizeof(struct Node)),*p,*p1;
List->data = 0; //这里用来存链表的大小
p = List;
printf("请输入一个链表:\n");
while (1){
scanf("%d",&num);
if(num == -1){
break;
}
//插入链表
struct Node* node = (struct Node*)malloc(sizeof(struct Node));
node->data = num;
p->next = node;
p = p->next;
List->data++; //链表的大小 +1
}
p = List -> next;
// 对链表进行冒泡排序 5 4 3 2 1 -1
for(i=0;i<List->data-1;i++){
p1 = p;
for(j=0;j<List->data-1-i;j++){
if(p1->data < p1->next->data){
temp = p1->data;
p1->data = p1->next->data;
p1->next->data = temp;
}
p1 = p1->next;
}
}
// 输入到文件中
if((fp = fopen("/Users/yang/Desktop/链表1/a.bf","rb+")) == NULL){
printf("Cannot open file!");
exit(0);
}
p = List->next;
while (p!=NULL){
temp = p->data;
fwrite(&temp,sizeof(int),1,fp);
p = p->next;
}
//将文件中的位置指针重新定位到文件开头
rewind(fp);
//从文件中读取
fread(nums,sizeof(int),List->data,fp);
for(i = 0; i < List->data;i++){
printf("%d ",nums[i]);
}
fclose(fp);
return 0;
}