#includestdio.h
我們提供的服務有:成都網(wǎng)站建設、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、于都ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的于都網(wǎng)站制作公司
#includestdlib.h
//鏈表定義
typedef int ElemType;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
/*************************************
* 鏈表函數(shù) *
*************************************/
//鏈表初始化
void InitLink(LinkList L);
//創(chuàng)建函數(shù),尾插法
void CreateLink_T(LinkList L,int n);
//創(chuàng)建函數(shù),頭插法
void CreateLink_H(LinkList L,int n);
//銷毀函數(shù)
void DestroyLink(LinkList L);
//判斷是否為空函數(shù)
bool EmptyLink(LinkList L);
//獲取函數(shù)
bool GetLink(LinkList L,int i,int e);
//插入函數(shù)
void InsertLink(LinkList L,int i,int e);
//刪除函數(shù)
void DeleteLink(LinkList L,int i,int e);
//遍歷函數(shù)
void TraverseLink(LinkList L);
//鏈表長度函數(shù)
int LengthLink(LinkList L);
//合并函數(shù)
void MergeLink(LinkList L1,LinkList L2);
void main()
{
LinkList L1,L2;
InitLink(L1);
InitLink(L2);
CreateLink_H(L1,2);
CreateLink_T(L2,2);
TraverseLink(L1);
printf("\n");
TraverseLink(L2);
printf("\n");
MergeLink(L1,L2);
TraverseLink(L1);
TraverseLink(L2);
}
//創(chuàng)建函數(shù),尾插法
void InitLink(LinkList L)
{
L=(LinkList)malloc(sizeof(LNode));
if (!L)
{
printf("Init error\n");
return;
}
L-next=NULL;
}
void CreateLink_T(LinkList L,int n)
{
if(n1)
{
printf("n must =1\n");
return ;
}
else
{
// L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
for(int i=0;in;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));// the lower letter p
printf("enter the data :\t");
scanf("%d",(p-data));
p-next=L-next;
L-next=p;
}
}
}
//創(chuàng)建函數(shù),頭插法
void CreateLink_H(LinkList L,int n)
{
if (n1)
{
printf("n must =1\n ");
return;
}
else
{
//L=(LinkList)malloc(sizeof(LNode));
LinkList pre=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
pre=L;
for(int i=0;in;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
printf("enter the data:\t");
scanf("%d",(p-data));
pre-next=p;
pre=p;
}
pre-next=NULL;
}
}
//銷毀函數(shù)
void DestroyLink(LinkList L)
{
LinkList q=L,p=L;
while (p)
{
q=p;
p=p-next;
free(q);
}
L-next=NULL;
}
//判斷是否為空函數(shù)
bool EmptyLink(LinkList L)
{
if (NULL==L-next)
{
return true;
}
else
{
return false;
}
}
//獲取函數(shù)
bool GetLink(LinkList L,int i,int e)
{
if (i1)
{
return false;
}
else
{
if (EmptyLink(L))
{
return false;
}
LinkList p=L-next;
int j=1;
while(pji)
{
p=p-next;
j++;
}
if (!p||ji)
{
return false;
}
else
{
e=p-data;
return true;
}
}
}
//插入函數(shù)
void InsertLink(LinkList L,int i,int e)
{
if (i0||iLengthLink(L))
{
printf("Insert error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p(ji))
{
p=p-next;
j++;
}
if (!p||ji)
{
printf("Insert error\n");
return;
}
else
{
LinkList q=(LinkList)malloc(sizeof(LNode));
q-data=e;
q-next=p-next;
p-next=q;
}
}
}
//刪除函數(shù)
void DeleteLink(LinkList L,int i,int e)
{
if(i=0||iLengthLink(L))
{
printf("delete error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(pji-1)
{
p=p-next;
j++;
}
if(!p||ji)
{
printf("please enter i again\n");
return;
}
else
{
LinkList q=p-next;
e=p-next-data;
p-next=p-next-next;
free(q);
}
}
}
//遍歷函數(shù)
void TraverseLink(LinkList L)
{
LinkList p=L-next;
if(!p)
{
printf("the Link L is empty\n");
}
while(p)
{
printf("%d\n",p-data);
p=p-next;
}
}
//鏈表長度函數(shù)
int LengthLink(LinkList L)
{
int i=0;
LinkList p=L-next;
while(p)
{
p=p-next;
i++;
}
return i;
}
//合并函數(shù)
void MergeLink(LinkList L1,LinkList L2)
{
int i=0,flag=0;
LinkList p1=L1-next,p2=L2-next;
LinkList p=(LinkList)malloc ((LengthLink(L1)+LengthLink(L2)+2)*sizeof(LNode));
LinkList pre=p;
if (!p)
{
printf("MergeLink error\n");
return;
}
p-next=NULL;
while (p1p2)
{
if (p1-data=p2-data)
{
InsertLink(p,i++,p2-data);
p2=p2-next;
}
else
{
InsertLink(p,i++,p1-data);
p1=p1-next;
}
}
while (p1)
{
InsertLink(p,i++,p1-data);
p1=p1-next;
}
while(p2)
{
InsertLink(p,i++,p2-data);
p2=p2-next;
}
while(pre)
{
pre=pre-next;
}
LinkList q=L1;
L1=p;
DestroyLink(q);
DestroyLink(L2);
}
第一步:創(chuàng)建文件 比如說 file *fp=fopen(……);
第二步:寫一個循環(huán),把鏈表的節(jié)點一個一個寫進文件里。
第三部:記得關閉文件- -
保存指針是沒有任何意義的,因為每次程序動態(tài)分配內(nèi)存的位置都不一樣,所以保存了的指針下次也不會指向正確的地方。想要保存鏈表的話只需要保存鏈表里有用的內(nèi)容把每個鏈表里有用的東西按順序?qū)懭胛募x取的時候重新通過動態(tài)分配內(nèi)存來建立新的鏈表,然后讀入對應的內(nèi)容。不需要知道鏈表的長度,C里面的輸入函數(shù)可以返回成功讀入的內(nèi)容的長度,如果失敗或者是文件到了結(jié)尾就會返回-1。所以只需要看看每次返回的值。如果不是-1,繼續(xù)讀取下一個,否則停止讀取,鏈表終止。
比如:
struct list{
int i;
float f;
char c;
struct list *next;
};
輸出:
struct list *l;
fprintf(fp,"%d %f %c\n",l-i,l-f,l-c);
輸入:
struct list *l=0,*p;
while(1){
if(l=0){
l=(struct list *)malloc(sizeof(struct list));
l-next=0;
p=l;
}
else{
p-next=(struct list *)malloc(sizeof(struct list));
p=p-next;
p-next=0;
}
int m=fscanf(fp,"%d %f %c",(p-i),(p-f),(p-c));
if(m==-1) break;
}
head=(node*)malloc(sizeof(node));/ /創(chuàng)建頭結(jié)點
head-next=NULL;
while(n--)
{
printf("\n請輸入單鏈表第%d個結(jié)點的值:",i++);
scanf("%d",a);
p=(node*)malloc(sizeof(node));
p-info=a;
p-next=head-next;
head-next=p;
}
追問
能不能詳細一點呢
追答
#include "stdio.h"
typedef int datatype;
typedef struct link_node
{
datatype info;
struct link_node *next;
}node;
main()
{
int i=1,n,a;
node *head,*p,*q;
printf("\n本程序建立帶頭結(jié)點的單鏈表:\n");
printf("請輸入你所需要建立帶頭結(jié)點的單鏈表的結(jié)點數(shù):");
scanf("%d",a);
head=(node*)malloc(sizeof(node));
head-next=NULL;
while(a)
{
printf("\n請輸入單鏈表第%d個結(jié)點的值:",i++);
scanf("%d",n);
if(n==0)
break;
p=(node*)malloc(sizeof(node));
p-info=n;
p-next=head-next;
head-next=p;
a--;
}
if(!head-next) printf("\n單鏈表是空的!\n");
else
{
printf("\n單鏈表各個結(jié)點的值分別為:\n");
q=head-next;
while(q)
{
printf("%5d",q-info);/*輸出非空表中第一個結(jié)點的值*/
q=q-next;/*p指向第一個結(jié)點的下一個結(jié)點*/
}
}
printf("\n");
}
網(wǎng)頁標題:C語言單鏈表保存函數(shù) c語言單鏈表頭文件
當前網(wǎng)址:http://www.chinadenli.net/article20/dosiijo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設、電子商務、、全網(wǎng)營銷推廣、動態(tài)網(wǎng)站、網(wǎng)站導航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)