當前位置:首頁 » 編程語言 » 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語音,應該問題不大。