#include<stdio.h>
#include<stdlib.h>
struct Student
{
int studid; /*学号*/
char name[10]; /*姓名*/
int score1;
int score2;
int score3;
int total; /*总成绩*/
struct Student *next; /*指向下一个结点的指针*/
};
void inputlist(struct Student *phead)
{
struct Student *p;
while(1)
{
p = (struct Student*)malloc(sizeof(struct Student));
printf("请输入学生学号:");
scanf("%d", &(p->studid));//相当于-1为终止输入符号
if (p->studid==-1 )
{
free(p);
break;
}
printf("请输入学生姓名:");
scanf("%s", &(p->name));
printf("请输入第一科成绩:");
scanf("%d", &(p->score1));
printf("请输入第二科成绩:");
scanf("%d", &(p->score2)) ;
printf("请输入第三科成绩:");
scanf("%d", &(p->score3)) ;
p->total = p->score1+ p->score2+p->score3;
p->next = phead->next;//相当于p的尾结点指向了null
phead->next = p;//相当于phead的尾节点从指向null指向了p的头节点
printf("\n");
printf("若想终止输入数据,请输入学号为-1");
printf("\n");
}
}
void print(struct Student *phead)
{
struct Student *p;
p = (struct Student*)malloc(sizeof(struct Student));
p= phead->next;
printf("学号 姓名 第一科 第二科 第三科 总分 \n");
while(p!=NULL)
{
printf("%d\t", p ->studid);
printf("%s\t", p ->name);
printf("%d\t", p ->score1);
printf("%d\t", p ->score2);
printf("%d\t", p ->score3);
printf("%d\t", p ->total);
printf("\n");
p = p ->next;
}
}
void max(struct Student *phead)
{
struct Student *p,*q;
p=phead->next; //可以不用申请空间了
q=p->next;//使得指向下一个链表
while( (p->next)!=NULL)
{
if ((p->total)<=(q->total))
{
p=q;
}
q=q->next;
}
printf("\n");
printf("平均分最高分的同学数据为:\n");
printf("学号 姓名 第一科 第二科 第三科 总分 \n");
printf("%d\t", p ->studid);
printf("%s\t", p ->name);
printf("%d\t", p ->score1);
printf("%d\t", p ->score2);
printf("%d\t", p ->score3);
printf("%d\t", p ->total);
}
void insert(struct Student *phead)
{
struct Student *p;
p=(struct Student*)malloc(sizeof(struct Student));
printf("\n输入需要插入的学生数据\n");
printf("学 号:");
scanf("%d", &(p->studid));
printf("请输入学生姓名:");
scanf("%s", &(p->name));
printf("请输入第一科成绩:");
scanf("%d", &(p->score1));
printf("请输入第二科成绩:");
scanf("%d", &(p->score2));
printf("请输入第三科成绩:");
scanf("%d", &(p->score3));
p->next = phead->next;
phead->next = p;
}
void delete(struct Student *phead)
{
int dlt=0;
struct Student *p,*q;
p=phead;
q=phead->next;
printf("\n输入需要删除的学生数据的学号:");
scanf("%d",&dlt);
while(q!=NULL)
{
if(q->studid==dlt)
{
p->next=q->next;
free(p);
break;
}
p=q;
q = p->next;
}
print(phead);
}
void main ()
{
struct Student *phead;
phead =( struct Student *)malloc(sizeof(struct Student));//申请了一个结构体指针,该指针类型有尾标(phead->next),利用这个尾标来建立链表
phead->next=NULL;
inputlist(phead);
print(phead);
max(phead);
insert (phead);
delete(phead);
}
c语言链表:编写input()output()insert()delete()来输入学生成绩
最新推荐文章于 2023-02-04 00:59:16 发布