程序开发实训 【专题四】 初识单链表
包含题目
1、学生成绩(1 个结构体)
2、学生成绩(3 个结构体)
3、学生成绩(单链表-头插法)
4、学生成绩(单链表-尾插法)
注意
1.以下代码仅供参考,不代表最优解。如果您有更优的解,欢迎加群交流。
2.代码的运行结果与编译环境有关,以下代码均通平台测试,如果代码存在无法编译或输出异常,请检查运行环境。
# 1、学生成绩(1 个结构体)
【问题描述】
从键盘依次输入某个学生的姓名和成绩并保存,然后按照输入的顺序输出学生的姓名和成绩。
要求学生的姓名和成绩存储在一个结构体中。
【输入形式】
从键盘依次输入学生的学生姓名和成绩。输入空格隔开的学生姓名和成绩,其中学生成绩是整数。
【输出形式】
按照输入的顺序在同一行中输出学生的姓名和成绩,中间用空格隔开。
【输入样例】
aaa 50
【输出样例】
aaa 50
【评分标准】
要求必须用结构体实现学生姓名和成绩的封装存储,掌握结构体成员变量的访问。
#include <iostream>
#include <stdio.h>
using namespace std;
typedef struct node
{
string name;
int score;
} node;
int main()
{
string name;
int score;
cin >> name >> score;
node *p = NULL;
// 实例化一个节点
p = new node;
p->name = name;
p->score = score;
cout << p->name << " " << p->score << endl;
return 0;
}
# 2、学生成绩(3 个结构体)
【问题描述】
对某班学生成绩排序。从键盘依次输入某班 3 名学生的姓名和成绩并保存,然后按照输入的顺序输出每个学生的姓名和成绩。
【输入形式】
从键盘依次输入 3 个学生的学生姓名和成绩: 第一行输入班级学生人数; 在单独行上输入空格隔开的学生姓名和成绩,其中学生成绩是整数。
【输出形式】
按照输入的顺序输出每个学生的姓名和成绩,每行输出一位学生的姓名和成绩。
【输入样例】
aaa 50
bbb 70
ccc 65
【输出样例】
aaa 50
bbb 70
ccc 65
(注意:学生的明白和成绩用空格隔开)
#include <iostream>
#include <stdio.h>
using namespace std;
typedef struct node
{
string name;
int score;
node *next;
} node;
int main()
{
string name[3];
int score[3];
for (int i = 0; i < 3; i++)
cin >> name[i] >> score[i];
node *first;
first = new node;
first->next = NULL;
node *stu1, *stu2, *stu3;
stu1 = new node;
stu1->name = name[0];
stu1->score = score[0];
first->next = stu1;
stu2 = new node;
stu2->name = name[1];
stu2->score = score[1];
stu1->next = stu2;
stu3 = new node;
stu3->name = name[2];
stu3->score = score[2];
stu2->next = stu3;
node *p = first->next;
while (p)
{
cout << p->name << " " << p->score << endl;
p = p->next;
}
return 0;
}
# 3、学生成绩(单链表-头插法)
【问题描述】
对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过 50 人)并保存,然后按照输入顺序的反序输出每个学生的姓名和成绩。
【输入形式】
从键盘依次输入最多不超过 50 个学生的学生姓名和成绩: 第一行输入班级学生人数; 在单独行上输入空格隔开的学生姓名和成绩,其中学生成绩是整数。
【输出形式】
按照输入顺序的反序输出每个学生的姓名和成绩,每行输出一位学生的姓名和成绩。
【输入样例】
4
aaa 50
bbb 70
ccc 65
ddd 90
【输出样例】
ddd 90
ccc 65
bbb 70
aaa 50
(注意:学生的明白和成绩用空格隔开)
#include <iostream>
#include <stdio.h>
using namespace std;
typedef struct node
{
string name;
int score;
node *next;
} node;
node *create(node *head, string name[], int score[], int len);
void show(node *first);
int main()
{
int n;
cin >> n;
string name[n];
int score[n];
node *first;
for (int i = 0; i < n; i++)
cin >> name[i] >> score[i];
first = create(first, name, score, n);
show(first);
return 0;
}
node *create(node *first, string name[], int score[], int len)
{
// 单链表-头插
first = new node;
for (int i = 0; i < len; i++)
{
node *p = new node;
p->name = name[i];
p->score = score[i];
p->next = first->next;
first->next = p;
}
return first;
}
void show(node *first)
{
node *p = first->next;
while (p != NULL)
{
cout << p->name << " " << p->score << endl;
p = p->next;
}
}
# 4、学生成绩(单链表-尾插法)
【问题描述】
对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过 50 人)并保存,然后按照输入的顺序输出每个学生的姓名和成绩。
【输入形式】
从键盘依次输入最多不超过 50 个学生的学生姓名和成绩: 第一行输入班级学生人数; 在单独行上输入空格隔开的学生姓名和成绩,其中学生成绩是整数。
【输出形式】
按照输入的顺序输出每个学生的姓名和成绩,每行输出一位学生的姓名和成绩。
【输入样例】
4
aaa 50
bbb 70
ccc 65
ddd 90
【输出样例】
aaa 50
bbb 70
ccc 65
ddd 90
(注意:学生的明白和成绩用空格隔开)
#include <iostream>
#include <stdio.h>
using namespace std;
typedef struct node
{
string name;
int score;
node *next;
} node;
node *create(node *head, string name[], int score[], int len);
void show(node *first);
int main()
{
int n;
cin >> n;
string name[n];
int score[n];
node *first;
for (int i = 0; i < n; i++)
cin >> name[i] >> score[i];
first = create(first, name, score, n);
show(first);
return 0;
}
node *create(node *first, string name[], int score[], int len)
{
// 单链表-尾插
first = new node;
node *r = first;
for (int i = 0; i < len; i++)
{
node *p = new node;
p->name = name[i];
p->score = score[i];
p->next = NULL;
r->next = p;
r = p;
}
return first;
}
void show(node *first)
{
node *p = first->next;
while (p != NULL)
{
cout << p->name << " " << p->score << endl;
p = p->next;
}
}
# 评论交流
最后,如果你觉得笔记对你有帮助,不妨赞赏一杯可乐😅
QQ 交流群 217394861