如何提交与自己学号相邻的两位同学的学号与一门考试成绩,编程建立由这三组数据结点组成的简单链表写出c++代码
时间: 2023-03-09 16:43:52 浏览: 317
可以先创建一个结构体,用来存储学号、考试成绩和下一个结点的地址:struct Node{
int num;
float score;
struct Node *next;
};然后分别创建三个结构体变量:struct Node stu1, stu2, stu3;将学号和成绩赋值给它们:stu1.num = 学号1;
stu1.score = 成绩1;
stu2.num = 学号2;
stu2.score = 成绩2;
stu3.num = 学号3;
stu3.score = 成绩3;最后将这三个结点连接起来:stu1.next = &stu2;
stu2.next = &stu3;
stu3.next = NULL;
相关问题
提交与自己学号相邻的两位同学的学号与一门考试成绩,编程建立由这三组数据结点组成的简单链表
### 回答1:
首先,你需要定义一个结构体,来存储学号和成绩的信息。然后,你可以创建三个结构体变量,分别代表与你学号相邻的两位同学和你自己,并给它们赋值。最后,你需要让它们相互连接,以形成一个链表。
代码示例(C语言):
```
struct node {
int num;
int score;
struct node *next;
};
int main() {
struct node stu1, stu2, stu3;
stu1.num = 12345;
stu1.score = 80;
stu2.num = 12346;
stu2.score = 85;
stu3.num = 12347;
stu3.score = 90;
stu1.next = &stu2;
stu2.next = &stu3;
stu3.next = NULL;
return 0;
}
```
### 回答2:
首先,我们需要一个节点的结构体来存储学号和考试成绩的信息:
struct Node{
int xuehao;
int score;
struct Node* next;
};
其中,xuehao表示学号,score表示考试成绩,next表示指向下一个节点的指针。
接下来,我们可以编写一个函数来创建这个链表,按照学号的顺序插入节点,并且从输入中读取学号和考试成绩。假设学号和考试成绩分别存储在xuehao和score两个数组中:
struct Node* createList(int* xuehao, int* score){
struct Node* head = NULL;
struct Node* p;
for(int i=0; i<2; i++){
struct Node* newnode = (struct Node*)malloc(sizeof(struct Node));
newnode->xuehao = xuehao[i];
newnode->score = score[i];
newnode->next = NULL;
if(head == NULL){
head = newnode;
p = newnode;
}
else{
while(p->next != NULL && p->next->xuehao < xuehao[i]){
p = p->next;
}
newnode->next = p->next;
p->next = newnode;
p = head;//改变p的位置,重新从头开始查找
}
}
return head;
}
此时,我们已经成功地创建了一个由三个节点组成的简单链表。接下来,可以编写一个函数来遍历这个链表,输出每一个节点的学号和考试成绩:
void printList(struct Node* head){
struct Node* p = head;
while(p != NULL){
printf("学号:%d,考试成绩:%d\n", p->xuehao, p->score);
p = p->next;
}
}
最终,在主函数中,我们可以调用这两个函数,实现整个程序的功能:
int main(){
int xuehao[] = {1001, 1002, 1003};
int score[] = {80, 90, 85};
struct Node* head = createList(xuehao, score);
printList(head);
return 0;
}
输出结果如下:
学号:1001,考试成绩:80
学号:1002,考试成绩:90
学号:1003,考试成绩:85
### 回答3:
在建立该链表之前,我们需要先明确链表的概念。链表是一种常见的数据结构,也是一种线性表,它通过指针将一些节点串联起来,形成一个序列,并且可以按照一定的顺序进行访问。链表中的每个节点都包含了两个部分,一个是存储数据的部分,另一个是指向下一个节点的指针。每个节点的指针都指向它后面的那个节点,这是链表的一个最显著的特点。
接下来,根据题目要求,我们假设自己的学号是A,那么与自己学号相邻的两位同学的学号应该分别是B和C。同时,我们还需要知道这三个人在某一门课程的成绩,假设这门课程的名称为Math,那么学号A、B、C在Math课程的成绩分别为90、85和95分。
现在,我们可以开始编写链表的数据结构了,每个节点应该包含三个部分:学号、成绩和指向下一个节点的指针。我们可以定义一个结构体来表示这些节点,代码如下:
```
struct Node {
char ID[20];
int score;
Node* next;
};
```
其中,ID表示学号,score表示成绩,next表示指向下一个节点的指针。现在我们可以开始创建链表了,代码如下:
```
Node* createList() {
Node* head = NULL;
char id[20];
int score;
// 添加第一个节点
cout << "请输入学号和成绩(以空格分隔):";
cin >> id >> score;
Node* node = new Node();
strcpy(node->ID, id);
node->score = score;
node->next = NULL;
head = node;
// 添加第二个节点
if (strcmp(id, "A") == 0) { // 如果输入的学号是A,那么B是下一个节点
cout << "请输入学号B的成绩:";
cin >> score;
Node* node2 = new Node();
strcpy(node2->ID, "B");
node2->score = score;
node2->next = NULL;
head->next = node2;
} else { // 如果输入的学号是C,那么B是前一个节点
cout << "请输入学号B的成绩:";
cin >> score;
Node* node2 = new Node();
strcpy(node2->ID, "B");
node2->score = score;
node2->next = head;
head = node2;
}
// 添加第三个节点
cout << "请输入学号C的成绩:";
cin >> score;
Node* node3 = new Node();
strcpy(node3->ID, "C");
node3->score = score;
node3->next = NULL;
Node* p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = node3;
return head;
}
```
在上面的代码中,我们首先使用了一个指针head来表示链表的头结点,初始值为NULL。然后,我们添加了第一个节点,也就是自己的学号和成绩。接着,我们根据输入的学号判断B和C的相对位置,并分别添加了相应的节点。最后,我们添加了第三个节点C,将其添加到链表的末尾。
现在,我们已经创建好了这个链表,可以使用以下代码来打印所有节点的信息:
```
void printList(Node* head) {
Node* p = head;
while (p != NULL) {
cout << p->ID << " " << p->score << endl;
p = p->next;
}
}
```
最后,我们可以在主函数中调用createList和printList来测试代码的效果:
```
int main() {
Node* head = createList();
printList(head);
return 0;
}
```
完整的代码如下:
提交与自己学号相邻的两位同学的学号与一门考试成绩,编程建立由这三组数据结点组成的简单链表。
好的,这个问题可以回答。以下是建立简单链表的 C 代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int id;
int score;
struct Node *next;
} Node;
int main() {
Node *head = NULL;
Node *tail = NULL;
// 添加第一个结点
Node *node1 = (Node*)malloc(sizeof(Node));
node1->id = 1001;
node1->score = 90;
node1->next = NULL;
head = node1;
tail = node1;
// 添加第二个结点
Node *node2 = (Node*)malloc(sizeof(Node));
node2->id = 1002;
node2->score = 85;
node2->next = NULL;
tail->next = node2;
tail = node2;
// 添加第三个结点
Node *node3 = (Node*)malloc(sizeof(Node));
node3->id = 1003;
node3->score = 95;
node3->next = NULL;
tail->next = node3;
tail = node3;
// 遍历链表并输出每个结点的信息
Node *p = head;
while (p != NULL) {
printf("学号:%d,成绩:%d\n", p->id, p->score);
p = p->next;
}
// 释放内存
p = head;
while (p != NULL) {
Node *temp = p;
p = p->next;
free(temp);
}
return 0;
}
阅读全文