c语言的问题!求大神!在线等!
建立一个学生链表并输出,每个结点包括:学号、姓名、成绩。建立链表时输入成绩为负数就结束。要求:编写建立链表、输出链表分别用函数实现,并在主函数中调用它们。...
建立一个学生链表并输出,每个结点包括:学号、姓名、成绩。建立链表时输入成绩为负数就结束。要求:编写建立链表、输出链表分别用函数实现,并在主函数中调用它们。
展开
1个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
char ID[10]; //学号
char name[20]; //姓名
float score; //成绩
struct node *next;
}Lnode;
void Link_print(Lnode *head);
Lnode *Link_creat_tail()
{
Lnode *phead,*tail, *nhead;
char pid[10] = {0};
char sname[20] = {0};
float num;
phead = NULL;
tail = NULL;
nhead = NULL;
printf("The id:");
gets(pid);
printf("The name:");
gets(sname);
printf("The score:");
scanf("%f", &num);
getchar();
while(num >= 0)
{
phead = (Lnode *)malloc(sizeof(Lnode));
if(NULL == phead) //申请失败
{
free(phead);
perror("malloc error!\n");
return phead;
}
strcpy(phead->ID, pid);
strcpy(phead->name, sname);
phead->score = num;
if(NULL == tail) //第一个节点
{
phead->next = NULL;
nhead = phead;
tail = phead;
}
else //其他节点
{
phead->next = NULL;
tail->next = phead;
tail = phead;
}
printf("The id:");
gets(pid);
printf("The name:");
gets(sname);
printf("The score:");
scanf("%f", &num);
getchar();
}
return nhead;
}
void Link_print(Lnode *head)
{
if(head == NULL)/*入参检查*/
{
printf("empty link!\n");
return ;
}
printf("ID \tname\tscore\n");
while(head != NULL)
{
printf("%s\t%s\t%0.2f\n",head->ID, head->name, head->score);
head = head->next;
}
}
int main()
{
Lnode *head;
head = Link_creat_tail();
Link_print(head);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询