C语言高手进!关于结构体链表的文件写入与读取问题

供稿:hz-xin.com     日期:2025-01-21
C语言…关于结构体和链表的文件操作

按顺序写入 首先写学号 再依次姓名

当把链表已经确定的时候,就可以依次存入文件。
和平时链表的遍历一样,每读取一个节点内容就进行一次存入操作。
不过要注意几个部分的检查:
内存空间是否分配成功
是否成功存入到文件中
在工作完成之后,是否将以后不会用到的变量清空和删除。

按照问题要求的代码如下:
Consumer* read_list()
{
FILE *fp;
if ((fp = fopen("CONSUMER.dat", "rb")) == NULL)
{
printf("无法读取 CONSUMER.dat
");
return NULL;
}
int sign;
Consumer *s,*p,*head;

head= (Consumer*)malloc(SIZE_C);
if (head == NULL)
{
printf("读取失败!内存空间申请不足!
");
return NULL;
}
fseek(fp, 0, SEEK_END);
if (ftell(fp) == 0)
{
return NULL;
}
p = head;
p->next = NULL;
while (feof(fp))
{
s = (Consumer*)malloc(SIZE_C);
//fread(s, SIZE_C, 1, fp);
fread(s, sizeof(char), SIZE_C, fp);
p->next = s;
p = s;
p->next = NULL;
}
fclose(fp);
return head;
}//读取文件到链表
int save_consumer(Consumer *p)
{
FILE *fp;
Consumer *head;
head = p;//p为已经构建好的链表
//if ((fp = fopen("CONSUMER.dat", "ab+")) == NULL)
if ((fp = fopen("CONSUMER.dat", "wb")) == NULL)
{
printf("无法打开 CONSUMER.dat!
");
return -1;
}
while (p != NULL)
{
//fwrite(p, SIZE_C, 1, fp);
fwrite(p, sizeof(char), SIZE_C, fp);
p = p->next;
}
fclose(fp);
return 1;
}//储存链表到文件

链表的建立与插入一个数,你看下吧。#include<stdio.h>
#include<malloc.h>
#define N '\0'
struct number
{
int num;
struct number *next;
};
typedef struct number ST;
ST *A()
{
int x;
ST *h,*s,*r;
h=(ST *)malloc(sizeof(ST));
r=h;
scanf("%d",&x);
while(x!=-1)
{
s=(ST *)malloc(sizeof(ST));
s->num=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=N;
return h;
}
void B(ST *h)
{
ST *p;
p=h->next;
if(p==N)
printf("NOT!\n");
else
{
do
{
printf("%d ",p->num);
p=p->next;
}while(p!=N);
printf("\n");
}
}
void C(ST *h,int x,int y)
{
ST *s,*p,*q;
s=(ST *)malloc(sizeof(ST));
s->num=x;
p=h;
q=h->next;
while(q!=N&&q->num!=y)
{
p=q;
q=q->next;
}
p->next=s;
s->next=q;
}
void D(ST *h)
{
ST *p;
p=h->next;
while(p!=N)
{
printf("%d ",p->num);
p=p->next;
}
}
void main()
{
ST *head;
head=A();
B(head);
int x,y;
scanf("%d%d",&x,&y);
C(head,x,y);
D(head);}

这个简单啊。

C语言高手进!关于结构体链表的文件写入与读取问题
链表的建立与插入一个数,你看下吧。#include<stdio.h> include<malloc.h> define N '\\0'struct number { int num;struct number *next;};typedef struct number ST;ST *A(){ int x;ST *h,*s,*r;h=(ST *)malloc(sizeof(ST));r=h;scanf("%d",&x);while(x!=-1){ s=(ST *...

关于C语言中,链表数据的文件储存和提取。
return 1;}\/\/储存链表到文件

速求C高手,急待解决,坐等(no relevant changes detected)
include"iostream"using namespace std;typedef struct node{ \/\/链表结构体 char data; struct node *next;}linklist;void ListCreate(linklist *&p) \/\/创建链表{ linklist *s,*r; \/\/定义两个链表类型的临时指针 char x; \/\/定义一个临时性字符变量 p=(linklist*)m...

C语言仓库管理系统
仓库管理系统C语言C++数据结构链表课程设计 include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h> define MAX 64 typedef struct node{ \/* 定义结构体类型dnode *\/ int number; \/* 货物编号 *\/ char name[MAX]; \/* 货物名称 *\/ int counter; \/* 货物...

用C语言将文本文件中的数据(一个个结构体类型的数据)读到链表中去,代码...
这是我最开始学习链表的时候写的一个很小的程序,好像不是很完善,但是大致应该没有问题,你可以参照的看看。太晚了,实在是不想写了。include <stdio.h>#include <io.h>#include <conio.h>#include <stdlib.h>#include <string.h>#define MAX 200struct student{char no[10]; \/\/ 学号char...

c语言如何从文件读入,并存放在链表中
\/\/举个单链表的例子,首先定义链表成员的结构体 struct filetext{char buf[BUFSIZE];struct filetext *next;};\/\/读取文件,并插入进链表的函数,filename为要读取的文件名,head为链表的头节点,函数返回插入新节点后链表的头节点 struct filetext * readfile(char * filename,struct filetext * ...

C语言链表和文件操作
但是,fread是读取二进制文件的函数,如果文件中是纯文本,你用fread去读当然是错的,如果文件中是二进制,你用fread也不可能读成你想要的结构体。如果你的xls文件是Excel的原生二进制文件,那就更不可能是你用fread能读出来的,得用专门的库,如微软官方的office com库。不知你明不明白二进制文件和...

求大大们具体描述下C语言中的结构体和链表(最好能用图表描述)
在计算机科学中,链表作为一种基础的数据结构可以用来生成其它类型的数据结构。链表通常由一连串节点组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向明上一个\/或下一个节点的位置的链接("links")。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或...

关于C语言结构体指针的一个疑问?
出现此问题的原因在于链表创建create函数有问题,问题定位在图中红色框内。此处每个节点使用的是局部变量,函数结束后,局部堆栈虽然内容不会清除,但内存会被回收,如果其它地方也使用堆栈可能会分给它用,内存内容就会改变。正确的方式是申请堆内存。使用malloc函数,同时包含头文件#include<stdlib.h>。框内...

C语言的家谱图。。想求一个运用结构链表的源程序
本文将提供一个使用结构链表的C语言源程序实现家谱图的示例。家谱图是一种展示家族关系的图表,通过此程序可以方便地创建、查找、输出家谱信息。程序定义了结构体`BiNode`用于表示家谱中的每个个体,包括名字、性别、父母信息以及辈分。通过使用栈的数据结构,程序实现了先序遍历家谱、查找特定个体、输出特定...