提交与自己学号相邻的两位同学的学号与一门考试成绩,编程建立由这三组数据结点组成的简单链表。
时间: 2023-05-31 14:20:59 浏览: 225
c语言版学生成绩管理 数据结构单链表实现
5星 · 资源好评率100%
### 回答1:
首先, 需要先定义一个结点类:
```python
class Node:
def __init__(self, student_id, exam_score):
self.student_id = student_id
self.exam_score = exam_score
self.next = None
```
然后, 可以按照如下方式创建链表:
```python
# 创建结点
node1 = Node(学号1, 成绩1)
node2 = Node(学号2, 成绩2)
node3 = Node(学号3, 成绩3)
# 建立链接关系
node1.next = node2
node2.next = node3
```
这样, 便创建了由三个结点组成的链表, 其中结点1指向结点2, 结点2指向结点3.
如果需要遍历链表,可以使用如下代码
```python
current_node = node1
while current_node:
print(current_node.student_id, current_node.exam_score)
current_node = current_node.next
```
上述代码将从第一个节点开始依次打印出每个节点的学号和成绩。
### 回答2:
为了建立这个简单链表,我们需要首先确定链表的数据结构。在这个问题中,每个数据结点包含三个数据元素:学号,考试成绩和下一个节点的指针。由于题目要求提交与自己学号相邻的两位同学的学号和考试成绩,我们可以将它们存储在一个结构体中,如下所示:
```
struct Node {
int id; // 学号
int score; // 考试成绩
Node *next; // 指向下一个节点的指针
};
```
在这个结构体中,我们定义了两个整型变量来存储学号和考试成绩,以及一个指向下一个节点的指针。接下来,我们可以编写代码来创建这个链表。
首先,我们需要定义三个数据结点,并将它们初始化为题目给定的数据。接着,我们将它们串联在一起,形成一个简单的链表。代码如下:
```
// 创建三个节点
Node *node1 = new Node;
node1->id = 20200001;
node1->score = 90;
Node *node2 = new Node;
node2->id = 20200002;
node2->score = 85;
Node *node3 = new Node;
node3->id = 20200003;
node3->score = 95;
// 将节点串联成一个链表
node1->next = node2;
node2->next = node3;
node3->next = nullptr;
```
在这个代码中,我们通过 `new` 运算符创建了三个数据结点,并将它们初始化为题目给定的数据。接着,我们使用箭头运算符 `->` 来访问结构体成员,并将它们串联在一起形成一个链表。注意,我们将最后一个节点的 `next` 指针设置为 `nullptr`,表示这个节点是链表的尾部。
最后,我们可以遍历整个链表,验证数据结点是否已经正确地串联在一起。代码如下:
```
// 遍历链表
Node *curr = node1;
while (curr != nullptr) {
cout << "学号:" << curr->id << ",成绩:" << curr->score << endl;
curr = curr->next;
}
```
在这个代码中,我们使用一个指针 `curr` 来遍历整个链表。每次遍历时,我们输出当前节点的学号和成绩,并将指针指向下一个节点。当指针指向 `nullptr` 时,表示已经遍历完整个链表。
### 回答3:
首先我们需要定义链表的结构体,以及节点的数据类型和指针类型:
```c++
struct Node {
int num;
int score;
Node* next;
};
typedef Node* LinkList;
```
其中,`num`代表学号,`score`代表考试成绩,`next`代表指向下一个节点的指针。`LinkList`则是指向结构体`Node`的指针类型。
接下来,我们需要输入当前学生的学号和考试成绩,以及其他两位同学的学号和考试成绩。为了方便演示,我们先将其设置为固定值:
```c++
int myNum = 20210001;
int num1 = myNum - 1;
int score1 = 92;
int num2 = myNum + 1;
int score2 = 78;
```
然后,我们需要创建三个节点,并将它们依次连接起来,形成一个简单链表:
```c++
LinkList head = new Node(); // 创建头节点
head->num = myNum;
head->score = 80;
LinkList p = new Node(); // 创建第一个数据节点
p->num = num1;
p->score = score1;
p->next = NULL;
LinkList q = new Node(); // 创建第二个数据节点
q->num = num2;
q->score = score2;
q->next = NULL;
head->next = p; // 将数据节点连接到头节点后面
p->next = q;
```
此时,我们就已经创建出了一个由三个节点组成的简单链表。它的结构如下图所示:
```
+--------+ +--------+ +--------+
| head |------>| p |------>| q |
+--------+ +--------+ +--------+
| num: | | num: | | num: |
| score: | | score: | | score: |
| next: |------>| next: |------>| next: |
+--------+ +--------+ +--------+
```
最后,我们可以使用循环遍历链表,并输出每个节点的学号和考试成绩:
```c++
LinkList temp = head;
while (temp != NULL) {
cout << "学号:" << temp->num << " ";
cout << "成绩:" << temp->score << endl;
temp = temp->next;
}
```
完整的代码如下所示:
```c++
#include <iostream>
using namespace std;
struct Node {
int num;
int score;
Node* next;
};
typedef Node* LinkList;
int main() {
int myNum = 20210001;
int num1 = myNum - 1;
int score1 = 92;
int num2 = myNum + 1;
int score2 = 78;
LinkList head = new Node(); // 创建头节点
head->num = myNum;
head->score = 80;
LinkList p = new Node(); // 创建第一个数据节点
p->num = num1;
p->score = score1;
p->next = NULL;
LinkList q = new Node(); // 创建第二个数据节点
q->num = num2;
q->score = score2;
q->next = NULL;
head->next = p; // 将数据节点连接到头节点后面
p->next = q;
LinkList temp = head;
while (temp != NULL) {
cout << "学号:" << temp->num << " ";
cout << "成绩:" << temp->score << endl;
temp = temp->next;
}
return 0;
}
```
阅读全文