哪位高手帮忙改改呀
#include<stdio.h>#include<stdlib.h>
struct student
{
int num[100];
double score;
struct student *next;
};
typedef struct student stud;
stud*create();
void print(stud *head);//显示链表中的数据
int insert(stud *head);//在链表中插入结点
int delete(stud*head);//删除链表中的结点
void cp(stud *head);//链表中的数据存盘
void dc(stud *head);//通过读出文件中的内容建立链表
void main()
{
stud*head;
head=create();
print(head);
insert(head);
print(head);
delete(head);
print(head);
cp(head);
print(head);
dc(head);
print(head);
}
stud *create()//动态链表创建
{
int n=0;
stud *head,*p1,*p2;
p1=(stud*)malloc(sizeof(stud));
printf("please input data:");
scanf("%d%lf",&p1->num,&p1->score);
head=NULL;
while(p1->num!=0)
{
++n;
if(n==1)
{
head=p1;
}
else
{
p2->next=p1;
}
p2=p1;
p1=(stud*)malloc(sizeof(stud));
printf("please input data:");
scanf("%d%lf",&p1->num,&p1->score);
}
p2->next=NULL;
free(p1);
return head;
}
void print(stud*head)
{
stud*p=head;
while(p!=NULL)
{
printf("%d %lf\n",p->num,p->score);
p=p->next;
}
printf("\n---------------------------------------\n");
}
/*int insert(stud **phead)
{
stud*head=*phead,*p;
p=(stud*)malloc(sizeof(stud));
printf("num, score:\n");
scanf("%s",p->num);
scanf("%f",p->score);
p=p->next=head;
*phead=p;
}*/
int insert(stud *head)//在链表中插入结点
{
stud *p=head;
stud *s;
int j=0,i,num;
double score;
printf("请输入第几个点插入(并输入插入者的学号和分数):");
scanf("%d%d%lf",&i,&num,&score);
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
return 0;
}
s=(stud*)malloc(sizeof(stud));
s->num=num;
s->score=score;
s->next=p->next;
p->next=s;
return 1;
}
int delete(stud*head)
{
stud*p=head;
stud*q;
int j=0,i;
printf("请输入第几个点删除:");
scanf("%d",&i);
//寻找第i个结点,并令p指向前结点
while(p->next && j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>i-1) // 删除位置不合理
{
return 0;
}
q=p->next;
p->next=q->next;
free(p);
return 1;
}
void cp(stud *head)//链表中的数据存盘
{
{
FILE *fp;
int n=0;
stud*p;
p=head;
fp=fopen("d:\\student.txt","w");
while(p)
{
n++;
p=p->next;
}
while(p!=NULL)
{
fwrite(p,sizeof(stud),1,fp);
p=p->next;
}
fclose(fp);
}
}
void dc(stud *head)//通过读出文件中的内容建立链表
{
FILE *fp;
stud*p=head;
fp=fopen("d:\\student.txt","r");
while(p!=NULL)
{
fread(p,sizeof(stud),1,fp);
p=p->next;
}
fclose(fp);
}