为了对班级学生的基本信息和C语言程序设计成绩进行管理,利用结构体变量记录每个学生的学号和C程序设计成绩。先根据用户输入的人数建立单向链表来存放学生的信息,然后输出各个学生的信息,分别用自定义函数实现如下功能: (1)写函数creat(),使其建立单链表来存放学生的信息及输出各学生的信息; (2)写函数delete(),按学号检索学生信息,如果找到,则删除该学生信息,并输出删除过后的所有学生信息,否则输出“不存在!”。 (3)写函数输出链表中的结点。 (4)释放链表所占内存空间。 struct studen
时间: 2024-04-26 21:21:58 浏览: 10
t{
int num; // 学号
float score; // C程序设计成绩
struct student *next; // 指向下一个学生的指针
};
// 全局变量,指向链表的头结点
struct student *head = NULL;
// 函数:创建链表并输出每个学生的信息
void create(){
int n;
printf("请输入学生人数:");
scanf("%d", &n);
if(n <= 0){
printf("输入有误!\n");
return;
}
struct student *p, *tail;
p = tail = (struct student*)malloc(sizeof(struct student));
printf("请输入第1个学生的学号和C程序设计成绩:");
scanf("%d%f", &p->num, &p->score);
p->next = NULL;
head = p;
for(int i=2; i<=n; i++){
p = (struct student*)malloc(sizeof(struct student));
printf("请输入第%d个学生的学号和C程序设计成绩:", i);
scanf("%d%f", &p->num, &p->score);
p->next = NULL;
tail->next = p;
tail = p;
}
printf("学生信息如下:\n");
p = head;
while(p != NULL){
printf("学号:%d,C程序设计成绩:%f\n", p->num, p->score);
p = p->next;
}
}
// 函数:查找并删除学生信息,如果找到则返回被删除的学生结点,否则返回NULL
struct student* delete(int num){
struct student *p = head, *pre = NULL;
// 查找要删除的结点
while(p != NULL && p->num != num){
pre = p;
p = p->next;
}
if(p == NULL){
printf("不存在!\n");
return NULL;
}
// 删除结点
if(pre == NULL){ // 删除的是头结点
head = p->next;
}else{
pre->next = p->next;
}
printf("删除成功!\n");
// 输出删除过后的学生信息
p = head;
while(p != NULL){
printf("学号:%d,C程序设计成绩:%f\n", p->num, p->score);
p = p->next;
}
return p;
}
// 函数:输出链表中的结点
void print(){
struct student *p = head;
printf("学生信息如下:\n");
while(p != NULL){
printf("学号:%d,C程序设计成绩:%f\n", p->num, p->score);
p = p->next;
}
}
// 函数:释放链表所占内存空间
void free_list(){
struct student *p = head, *q;
while(p != NULL){
q = p->next;
free(p);
p = q;
}
head = NULL;
}