删除学号为102 的学生信息

本文介绍了一个使用C语言实现的学生信息链表程序,包括创建链表、打印所有学生信息、查找平均成绩最高者及删除指定学号学生信息的功能。通过此程序,读者可以学习到如何在C语言中进行链表的基本操作。
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct student{
	char name[20];//姓名
	int score[3];//3门成绩
	float ave;//平均成绩
	int num;//学号
};
struct node{
	struct student stu;
	struct node*next;
	};
struct node*cread(){//建立链表
	struct node*head=NULL,*p1,*p2;
	int i;
	p1=(struct node*)malloc(sizeof (struct node));//开辟空间
	printf("请输入学生信息,学号,3门成绩,姓名");
	scanf("%d%d%d%d%s",&p1->stu.num,&p1->stu.score[0],
	&p1->stu.score[1],&p1->stu.score[2],p1->stu.name);
	p1->stu.ave=(p1->stu.score[0]+p1->stu.score[1]+p1->stu.score[2])/3;
	printf("平均成绩为:%f\n",p1->stu.ave);
	p1->next=NULL;
	p2=p1;
    head=p1;
	
	for(i=0;i<2;i++){
	p1=(struct node*)malloc(sizeof (struct node));//开辟空间
	printf("请输入学生信息,学号,3门成绩,姓名");
	scanf("%d%d%d%d%s",&p1->stu.num,&p1->stu.score[0],
	&p1->stu.score[1],&p1->stu.score[2],p1->stu.name);
	p1->stu.ave=(p1->stu.score[0]+p1->stu.score[1]+p1->stu.score[2])/3;
	printf("平均成绩为:%f\n",p1->stu.ave);
	p1->next=NULL;
	p2->next=p1;
	p2=p1;
	}
	p2->next=NULL;
	return head;
}
void print(struct node*p){//输出所有数据
	struct node*p1;
	printf("遍历\n");
	for(p1=p;p1!=NULL;p1=p1->next){
	printf("%d %d %d %d %s %f\n",p1->stu.num,p1->stu.score[0],p1->stu.score[1],p1->stu.score[2],
	p1->stu.name,p1->stu.ave);
	}
}
void max1(struct node*p){//找最大的平均值
	struct node*maxave=p,*p1;
	for(p1=p;p1!=NULL;p1=p1->next){
	if(maxave->stu.ave<p1->stu.ave)
		maxave=p1;
	}printf("最大成绩的学员信息\n");
	printf("%d %d %d %d %s %f\n",maxave->stu.num,maxave->stu.score[0],maxave->stu.score[1],maxave->stu.score[2],maxave->stu.name,maxave->stu.ave);
}
void delet2(struct node*p){
	struct node*a,*b,*p1;//a指向删除节点的指针,b为指向删除节点的前一个
	int numb=102;
	if(p==NULL){
	printf("链表为空不执行");}
	else{
	a=p;
	while(numb!=a->stu.num&&a->next!=NULL){
	   b=a;
	   a=a->next ;}
	if (numb==a->stu.num){
		if (a==p)
		p=a->next;
		else
		b->next=a->next;
		printf("结点2已删除! \n遍历\n");
		for(p1=p;p1!=NULL;p1=p1->next){
	printf("%d %d %d %d %s %f\n",p1->stu.num,p1->stu.score[0],p1->stu.score[1],p1->stu.score[2],p1->stu.name,p1->stu.ave);
}}}}
int main()
{
	struct node*p,*maxave;
	p=cread();//链表返回头指针
	print(p);//输出
	max1(p);//找出最大值
	delet2(p);//删除102学生信息
 return 0;   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值