当前位置:首页 » 编程语言 » c语言实现单链表与文件的存取
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言实现单链表与文件的存取

发布时间: 2022-05-19 07:51:53

c语言单向链表中如何往文件里存入数据和读取数据

只需要将文件标示为二进制即可。
struct student stu[256];
//将stu赋值...

FILE * fd=fopen("c:\\test.bin","wb");//打开
int i;
for(i=0;i<256;i++)//写入
fwrite((void*)&stu[i],sizeof(struct student),1,fd);

//读取第k个结构体
struct student rstu;
FILE *fd=fopen("c:\\test.bin","rb");//打开
fseek(fd,k*sizeof(struct student),SEEK_SET);//定位
fread(&rstu,sizeof(struct student),1,fd);//读取

② 编写c语言程序,从文件中读取数据顺序存储到单链表l中,文件中数据之间用逗号隔开

在c语言中,创建单链表需要使用到malloc函数动态申请内存;文件的读写需要首先使用fopen函数打开文件,然后使用fscanf,fgetc, fgets,fprintf,fputc,fputs等函数读写函数,最后读写完毕要使用fclose函数关闭函数。
下面的源程序展示了关于单链表如何从文件中读取数据和往文件里存入数据。
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>

typedef struct node {
int data;
struct node *next;
}node;

//从文件中读取数据存入链表
node *createlink()
{
node *head =(node*)malloc(sizeof(node));
int t;
node *p;
node *q;
p=q=head;
FILE * r= fopen("input.txt","r");
if(r==NULL)
{
printf("打开文件失败!");
return NULL;
}

while(fscanf(r,"%d",&t)!=EOF)
{
q= (node*)malloc(sizeof(node));
q->data=t;
p->next=q;
p=q;
}
p->next=NULL;
return head;
}

//输出链表到屏幕和文件output.txt
void outlink(node *head)
{
node *p=head->next;
FILE *w =fopen("output.txt","w");
if(w==NULL)
{
printf("打开文件失败!");
return;
}
while(p)
{
//输出链表节点数据到屏幕
printf("%d ",p->data);
//输出链表节点数据到文件output.txt
fprintf(w,"%d ",p->data);
p=p->next;
}
printf("\n");
fprintf(w,"\n");
fclose(w);
return;
}

int main()
{
node *head;
int n,m;
head=createlink();
outlink(head);
system("pause");
return 0;
}

③ c语言如何从文件读入,并存放在链表中

//举个单链表的例子,首先定义链表成员的结构体

struct filetext{char buf[BUFSIZE];

struct filetext *next;};

//读取文件,并插入进链表的函数,filename为要读取的文件名,head为链表的头节点,函数返回插入新节点后链表的头节点

struct filetext * readfile(char * filename,struct filetext * head)

{struct filetext * new = (struct filetext *)malloc(sizeof(struct filetext));//定义一个新成员,并给它分配空间

FILE * fp;//读取文件的文件流

struct filetext * p =head;//定义一个p,用来寻找链表中最后一个节点

if((fp=(fopen(filename,"r+")))==NULL)

{//如果打开文件失败,返回head,并提示

printf("open file failure");

return head;}

//然后开始读取文件,放到new的buf中

if(fread(new->buf,BUFSIZE,1,fp)<1)

{//如果读取失败,提示,并返回head

printf("read file failure");

return head;}

fclose(fp);

//文件读取完后,进行链表操作

if(!head)//如果传进来的head是个空指针,那么新指针就作为头节点返回

{new->next = NULL;

return new;}

while(p->next) p = p->next;//把p移动到最后一个节点

p->next = new;//p的下一个节点为new

new->next = NULL;//new的下一个节点为空

return head;

//这样这个函数就完成了,你可以写个主函数,定义一个头节点,试下。

(3)c语言实现单链表与文件的存取扩展阅读:

线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。

因此,为了表示每个数据元素与其直接后继数据元素 之间的逻辑关系,对数据元素 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。由这两部分信息组成一个"结点"(如概述旁的图所示),表示线性表中一个数据元素。

线性表的链式存储表示,有一个缺点就是要找一个数,必须要从头开始找起,十分麻烦。根据情况,也可以自己设计链表的其它扩展。但是一般不会在边上附加数据,因为链表的点和边基本上是一一对应的(除了第一个或者最后一个节点,但是也不会产生特殊情况)。

不过有一个特例是如果链表支持在链表的一段中把前和后指针反向,反向标记加在边上可能会更方便。

④ C语言中如何实现用文件保存一个动态的链表

随便说说
你可以
链表
的每一个结点,保存为一行.或者有一个特殊的符号来分割不同的结点,如果结点内有不同意义的数据,也可以用特殊的符号来分割,
这里要说明
因为c语言支持的只有流试文件
所以在文件存储链表的时候只能存储
单向链表

⑤ c语言如何用链表构建数据结构并实现数据的输入和保存

链表有多种形式,如:单向链表,双向链表,单向循环链表,双向循环链表。将链表结构定义为list_t,则该类型中一定(至少)存在一个指向下一节点的指针list_t *next;除了这个指针,list_t 中可以包含其它类型的数据,包括结构体变量。比如:typedef struct {
struct usr_struct data;
list_t *next;
} list_t;

⑥ 链表文件读取与写入的C语言程序代码怎么写啊

一边读取链表里面的内容,一边使用write函数写进文件;
一边用read函数读取文件信息,一边保存在链表中。
链表保存信息,必须要结构体,因为要有地址保存下个链表的地址
struct
test
{
char
arry[100];//用于保存信息
struct
test
*
next;//用于保存下个内容信息的指针地址
};
这样就可以把信息链接在一起了。

⑦ 关于C语言中,链表数据的文件储存和提取。

当把链表已经确定的时候,就可以依次存入文件。

和平时链表的遍历一样,每读取一个节点内容就进行一次存入操作。

不过要注意几个部分的检查:

  1. 内存空间是否分配成功

  2. 是否成功存入到文件中

  3. 在工作完成之后,是否将以后不会用到的变量清空和删除。


按照问题要求的代码如下:

Consumer*read_list()

{

FILE*fp;

if((fp=fopen("CONSUMER.dat","rb"))==NULL)

{

printf("无法读取CONSUMER.dat ");

returnNULL;

}

intsign;

Consumer*s,*p,*head;


head=(Consumer*)malloc(SIZE_C);

if(head==NULL)

{

printf("读取失败!内存空间申请不足! ");

returnNULL;

}

fseek(fp,0,SEEK_END);

if(ftell(fp)==0)

{

returnNULL;

}

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);

returnhead;

}//读取文件到链表

intsave_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);

return1;

}//储存链表到文件

⑧ C语言把文件中的数据导入到单链表中。

这样当然是不行的,最明显的错误就是你的malloc函数没有放在while循环之中,也就是说你只申请了一个textbook空间,当然不对啦
大概应该是这样吧
while(!feof(fp)){
//head->next = malloc
//fread(head->next)
//head = head->next
}
head->next = NULL;
没验证,有问题再说

⑨ c语言,从文件中读取单链表并输出。

需求有点不清晰,你要从文件里取什么东西出来?
我改了从txt取每一行的字符串出来,记录在你的链表,你参考一下
#include
"stdafx.h"
#include
"stdlib.h"
int
main()
{
struct
fac
{
//int
data;
char
data[256];
//不知道你要取什么数据,这里用个字符串数组代替
struct
fac
*next;
}*phead;
int
i;
FILE
*fp=fopen("d:\\text.txt","rb");
//一个有内容的txt文本,自己替换
struct
fac
*p;
struct
fac
*ptemp;
phead=(struct
fac*)malloc(sizeof(struct
fac));
phead->next=NULL;
ptemp=phead;
//fread(p,sizeof(struct
fac),1,fp);
while(fgets(
ptemp->data,256,fp
)!=NULL)//改用fgets取一行的数据
{
printf("%s\n",ptemp->data);
p=(struct
fac*)malloc(sizeof(struct
fac));
ptemp->next=p;
ptemp
=
ptemp->next;
}
//后面还应该有个释放链表的操作,这里程序结束会回收,就不写了。
}

⑩ C语言中如何以链表的形式存储信息,并把信息以字典方式存储在文件中

这个就是链表最基本的一种,只不过结构体多了点内容,用单项链表即可实现。建立个单向链表结构体,把这些内容加进去就行了,至于链表的排序,插入,删除都是最基本的应用,多看看C语音,应该问题不大。