【XDOJ2026秋数据结构】800.学生信息管理【Compash个人题解】

800.学生信息管理

问题描述
某班学生的信息存放在一个线性单链表中,但每学期都有学生因故退学。现要求根据退学学生的学号,将其信息从链表中删除。假设学生的数据只保存姓名、学号、性别,并采用结构体类型描述。

输入说明
输入n个学生数据(1<=n<=10)。每行一个学生信息,包括:姓名(不超过20个字符的字符串)、学号(整形)、性别(字符),以空格分隔。学生数据以#结束,并在下一行输入退学学生的学号。

输出说明
若链表中有退学学生,输出删除该学生后的学生数据;如果链表中没有该学生,则输出错误信息No。

输入样例

//输入样例
//例1:
LiDong 1001 M
ZhaoJian 1002 M
ChenKai 1003 M
LiXia 1004 F
WangHong 1005 F
QianLi 1006 F
ZhouQiang 1007 M
#
1003

//例2:
LiDong 1001 M
ZhaoJian 1002 M
ChenKai 1003 M
LiXia 1004 F
WangHong 1005 F
QianLi 1006 F
ZhouQiang 1007 M
#
1008

输出样例:

//输出样例
//例1:
LiDong 1001 M
ZhaoJian 1002 M
LiXia 1004 F
WangHong 1005 F
QianLi 1006 F
ZhouQiang 1007 M

//例2:
No

#include<iostream>
#include<cstring>
struct Student
{
	std::string name;
	int number;
	char gender;
	Student* next = NULL;
	Student(std::string n,int num, char g): name(n),number(num),gender(g){}
};
void insertStudent(Student*& head,std::string name,int number,char gender)
{
	Student* newStudent = new Student(name,number,gender);
	if(head == NULL)
	{
		head = newStudent;
		return;
	}
	Student* p = head;
	while(p->next)
	{
		p=p->next;
	}
	p->next = newStudent;
	return;
}
bool deleteStudentByNumber(Student*& head,int number)
{
	if(head==NULL) return false;
	if(head->next==NULL && head->number == number)
	{
		head = NULL;
		return true;
	}
	Student* prev = head;
	Student* cur = prev->next;
	while(cur)
	{
		if(cur->number == number)
		{
			prev->next = cur->next;
			delete cur;
			return true;
		}
		prev = prev->next;
		cur = cur->next;
	}
	return false;
} 
void printStudent(Student* head)
{
	Student* p = head;
	while(p)
	{
		std::cout<<p->name<<' '<<p->number<<' '<<p->gender<<std::endl;
		p=p->next; 
	}
	return;
}
int main() 
{
	Student* students = NULL;
	int count = 0;
	int quitNum;
	std::string name;
	int number;
	char gender;
	std::string input;
	while(std::cin>>input)
	{
		if(input == "#") break;
		
		if(count%3==0)
		{
			name = input;
		}
		else if(count%3 == 1)
		{
			number = std::atoi(input.c_str());
		}
		else
		{
			gender = input[0];
			insertStudent(students,name,number,gender);
		}
		count++;
	}
	std::cin>>quitNum;
	if(deleteStudentByNumber(students,quitNum))
	{
		printStudent(students);
	}
	else
	{
		std::cout<<"No";
	}
	return 0;
}
posted @ 2026-10-12 21:38  Compash  阅读(1)  评论(0)    收藏  举报