c語言鏈表存儲
❶ c語言中如何實現用文件保存一個動態的鏈表
隨便說說
你可以
鏈表
的每一個結點,保存為一行.或者有一個特殊的符號來分割不同的結點,如果結點內有不同意義的數據,也可以用特殊的符號來分割,
這里要說明
因為c語言支持的只有流試文件
所以在文件存儲鏈表的時候只能存儲
單向鏈表
❷ 關於C語言中,鏈表數據的文件儲存和提取。
當把鏈表已經確定的時候,就可以依次存入文件。
和平時鏈表的遍歷一樣,每讀取一個節點內容就進行一次存入操作。
不過要注意幾個部分的檢查:
內存空間是否分配成功
是否成功存入到文件中
在工作完成之後,是否將以後不會用到的變數清空和刪除。
按照問題要求的代碼如下:
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語言中怎樣用鏈表保存結構體數據(動態數據結構)
鏈表有多種形式,如:單向鏈表,雙向鏈表,單向循環鏈表,雙向循環鏈表。將鏈表結構定義為list_t,則該類型中一定(至少)存在一個指向下一節點的指針list_t
*next;除了這個指針,list_t
中可以包含其它類型的數據,包括結構體變數。比如:typedef
struct
{
struct
usr_struct
data;
list_t
*next;
}
list_t;
❹ 關於C語言中,鏈表的文件儲存方式
思路1是可行的,但思路2大多情況下是不可行的,因為鏈表是動態申請內存空間的,並且地址(理論上是隨機的)不確定,你用數據塊來讀寫,這不就等於原先隨機生產的指針地址都拿過來了?(如果釋放了鏈表的內存,被其它給佔用了該內存點,你的程序大多情況下會漰掉的)
思路2的可行情況:
1.原先申請的內存不能釋放,並且還在一起(當然程序也不可以關閉),保存文件等於沒啥用處
2.在讀取文件後,重置一下指向指針的地址!...