【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;
}

浙公网安备 33010602011771号