建立链表存放学生成绩姓名和学号
时间: 2023-03-30 11:01:59 浏览: 211
好的,这是一个关于数据结构的问题,我可以回答。建立链表可以使用结构体来存储学生成绩、姓名和学号,然后通过指针将各个节点连接起来,形成链表结构。每个节点可以包含一个学生的信息,包括姓名、学号和成绩等。这样就可以方便地对学生信息进行添加、删除、修改和查询等操作。
相关问题
C语言学生成绩管理--链表(为了对 班级学生的基本信息和C语言程序设计成绩进行管理,利用结构体变量记录每个学生的学号、姓名和C程序设计成绩。先根据用户输入的人数建立 单向链表来存放学生的信息,并且输出前)
好的,我明白了你的问题。下面是一个基于链表的 C 语言学生成绩管理系统的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生信息结构体
typedef struct student {
int id;
char name[20];
float score;
struct student *next;
} student_t;
// 创建链表
student_t *create_list(int n) {
student_t *head, *p, *q;
int i;
head = (student_t *)malloc(sizeof(student_t));
if (head == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
head->next = NULL;
q = head;
for (i = 0; i < n; i++) {
p = (student_t *)malloc(sizeof(student_t));
if (p == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
printf("Input student information (id name score): ");
scanf("%d%s%f", &p->id, p->name, &p->score);
p->next = NULL;
q->next = p;
q = p;
}
return head;
}
// 输出链表
void print_list(student_t *head) {
student_t *p;
printf("ID\tName\tScore\n");
for (p = head->next; p != NULL; p = p->next) {
printf("%d\t%s\t%.2f\n", p->id, p->name, p->score);
}
}
// 主函数
int main() {
int n;
student_t *head;
printf("Input the number of students: ");
scanf("%d", &n);
head = create_list(n);
print_list(head);
return 0;
}
```
这是一个简单的 C 语言学生成绩管理系统的示例代码,可以根据用户输入的人数建立单向链表来存放学生的信息,并且输出每个学生的学号、姓名和成绩。你可以根据这个代码进行修改和扩展,以满足你的具体需求。
按学号查找学生信息: 结构体类型定义如下: struct stu{ char name[20]; in num; int score; struct stu *next; }; 要求实现如下功能: (1)写函数create()实现建立单链表来存放学生的信息,如果输入大写‘Y’字符则继续创建结点存储学生信息,否则按任意键结束输入。 (2)写自定义函数输出链表中学生信息。 (3)写自定义函数按学号查询学生的信息。 (4)写自定义函数释放链表所占内存。 (在主函数依次调用各函数即可) 输入提示:"请输入学生姓名,学号,成绩: \n" 输入格式:"%s %d %d" 输入提示:"是否继续输入,按Y键继续输入,其他键就结束.\n" 输入提示:"请输入要查找学生的学号:\n" 输入格式:%d 查找输出格式:找到了则输出:"该学生的姓名:%s 学号:%d 成绩:%d \n" 找不到则输出提示:"不存在此学生\n" 输出提示:"所有学生信息为:\n姓名,学号,成绩\n" 输出格式:"%s %d %d\n" 程序运行示例1: 请输入学生姓名,学号,成绩: ↙ li 101 90 是否继续输入,按Y键继续输入,其他键就结束.↙ Y 请输入学生姓名,学号,成绩: ↙ zhang 102 88 是否继续输入,按Y键继续输入,其他键就结束.↙ Y 请输入学生姓名,学号,成绩: ↙ wang 103 70 是否继续输入,按Y键继续输入,其他键就结束.↙ N 请输入要查找学生的学号:↙ 103 该学生的姓名:wang 学号:103 成绩:70 ↙ 所有学生信息为:↙ 姓名,学号,成绩↙ li 101 90↙ zhang 102 88↙ wang 103 70↙ 程序运行示例2: 请输入学生姓名,学号,成绩: ↙ li 101 90 是否继续输入,按Y键继续输入,其他键就结束.↙ Y 请输入学生姓名,学号,成绩: ↙ zhang 102 88 是否继续输入,按Y键继续输入,其他键就结束.↙ Y 请输入学生姓名,学号,成绩: ↙ wang 103 70 是否继续输入,按Y键继续输入,其他键就结束.↙ N 请输入要查找学生的学号:↙ 100 不存在此学生 ↙ 所有学生信息为:↙ 姓名,学号,成绩↙ li 101 90↙ zhang 102 88↙ wang 103 70↙
以下是C++代码实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
struct stu{
char name[20];
int num;
int score;
struct stu *next;
};
stu *create(); //建立单链表
void output(stu *head); //输出链表
void find(stu *head); //按学号查询学生信息
void release(stu *head); //释放链表所占内存
int main(){
stu *head;
head=create(); //建立单链表
output(head); //输出链表
find(head); //按学号查询学生信息
release(head); //释放链表所占内存
return 0;
}
stu *create(){
stu *p, *q, *head;
char flag;
head=new stu;
head->next=NULL;
q=head;
do{
p=new stu;
cout<<"请输入学生姓名,学号,成绩:"<<endl;
cin>>p->name>>p->num>>p->score;
q->next=p;
q=p;
cout<<"是否继续输入,按Y键继续输入,其他键就结束."<<endl;
cin>>flag;
}while(flag=='Y'||flag=='y');
q->next=NULL;
return head;
}
void output(stu *head){
cout<<"所有学生信息为:"<<endl;
cout<<"姓名,学号,成绩"<<endl;
stu *p=head->next;
while(p!=NULL){
cout<<p->name<<" "<<p->num<<" "<<p->score<<endl;
p=p->next;
}
}
void find(stu *head){
int num;
cout<<"请输入要查找学生的学号:"<<endl;
cin>>num;
stu *p=head->next;
while(p!=NULL){
if(p->num==num){
cout<<"该学生的姓名:"<<p->name<<" 学号:"<<p->num<<" 成绩:"<<p->score<<endl;
return;
}
p=p->next;
}
cout<<"不存在此学生"<<endl;
}
void release(stu *head){
stu *p=head->next;
while(p!=NULL){
head->next=p->next;
delete p;
p=head->next;
}
delete head;
}
```
阅读全文