C语言从文件中读取一个链表(文件中不全是链表数据)
文件中第一行是一个数,表示struct的组数,后面是链表数据,一组由两行构成,第一行是名字,第二行是编号,我的代码:FILE*fp1;intn,i,j;charch;if...
文件中第一行是一个数,表示struct的组数,后面是链表数据,一组由两行构成,第一行是名字,第二行是编号,我的代码:
FILE *fp1;
int n,i,j;
char ch;
if((fp1=fopen("directory.in","r"))==NULL){
printf("File open error!\n");
exit(0);}
struct node{
char name[20];
char num[20];
struct node *next;
}*p,*q,*l;
l=(struct node*)malloc(sizeof(struct node));这一段我是参考另一个百度知道写的,不知道什么意思,求解
l->next=NULL;
q=(struct node*)malloc(sizeof(struct node));
q=l;
p = (struct node*)malloc(sizeof(struct node));
n=fgetc(fp1)-48;
fgetc(fp1);
for(i=0;i<n;i++)
{
for(j=0;(ch=fgetc(fp1))!='\n';j++)
p->name[j]=ch;
for(j=0;(ch=fgetc(fp1))!='\n';j++)
p->num[j]=ch;
p->next=NULL
q->next=p;
q=p;
}
首先声明我没学过如何载入链表,完全是看百度自己捣鼓试着来的,请海涵,帮忙看看这样读行不行?
链表数据是这样的:
2
jiang
501
yan
203 展开
FILE *fp1;
int n,i,j;
char ch;
if((fp1=fopen("directory.in","r"))==NULL){
printf("File open error!\n");
exit(0);}
struct node{
char name[20];
char num[20];
struct node *next;
}*p,*q,*l;
l=(struct node*)malloc(sizeof(struct node));这一段我是参考另一个百度知道写的,不知道什么意思,求解
l->next=NULL;
q=(struct node*)malloc(sizeof(struct node));
q=l;
p = (struct node*)malloc(sizeof(struct node));
n=fgetc(fp1)-48;
fgetc(fp1);
for(i=0;i<n;i++)
{
for(j=0;(ch=fgetc(fp1))!='\n';j++)
p->name[j]=ch;
for(j=0;(ch=fgetc(fp1))!='\n';j++)
p->num[j]=ch;
p->next=NULL
q->next=p;
q=p;
}
首先声明我没学过如何载入链表,完全是看百度自己捣鼓试着来的,请海涵,帮忙看看这样读行不行?
链表数据是这样的:
2
jiang
501
yan
203 展开
1个回答
展开全部
说实话,你这样写问题大。一般来说先建立一个头节点,在建立一个链表,里面包含头节点和计数器。
//链表节点定义
typedef struct _lnode
{
char name[20];
char num[20];
struct _lnode *next;
}lnode;
typedef struct
{
lnode head;
int count;
}link_list;
这样一个链表的类型就定义好了。通过link_list这个类型来声明一个链表。
然后写插入、删除的函数,这里给你演示插入的函数:
//定义一个链表变量
link_list my_list;
//初始化
int init_list(link_list* l)
{
l->head.name[20] = {0};
l->head.num[20] = {0};
l->head.next = NULL ;
l->count = 0 ;
return 0 ;
}
//从头增加链表节点
int insert_list_head(link_list* l, const char *name, const char *num)
{
/*新建结点*/
lnode* pnew = (lnode*)malloc( sizeof(lnode) );
if( NULL == pnew )
return -1;
strcpy(pnew->name, name);
strcpy(pnew->num, num);
pnew->next = NULL;
/*在头部插入结点*/
pnew->next = l->head.next;
l->head.next = pnew ;
l->count ++ ;
return 0;
}
增加数据时,调用这个函数就行了。
接下来,往文件里写的话,用fopen打开文件,用fwrite往这个文件指针里写你的链表变量就行了。至于你说的什么组数完全没必要,文件里只写入一个链表,读的时候用link_list 这个类型声明一个变量去接收,如果想看读的效果,那就要另外写打印链表每个节点数据区内容的函数了。闲来无事,帮你写一个吧:
//比如要打印my_list里面的内容
struct _lnode *pnode = my_list.head.next;
while(pnode != NULL)
{
printf("%s, %s\t", pnode->name, pnode->char);
pnode = pnode->next;
}
printf("\n");
效果也可以看了,大功告成辣!
追问
请问link_list 是什么数据类型?我用vs2010貌似不支持
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询