该问题需要实现一个简易学生信息管理系统,按如下步骤分别用自定义函数实现: (1) 根据输入信息创建单链表并输出所有结点信息。每个学生的信息包括姓名和成绩。 (2) 将上一步创建的单链表逆置后并输出所有结点信息。
时间: 2024-03-22 07:41:02 浏览: 47
好的,您的问题是如何实现一个简易的学生信息管理系统,并按照要求输出链表信息和逆置后的链表信息。我可以帮助您解决这个问题。
首先,我们需要定义一个结构体来存储每个学生的信息,包括姓名和成绩。然后,我们可以使用单链表来存储所有学生的信息。
以下是 C 语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
typedef struct student {
char name[20]; // 姓名
int score; // 成绩
struct student *next; // 下一个结点指针
} Student;
// 定义创建单链表函数
Student* createList() {
Student *head, *p, *q;
int n, i;
printf("请输入学生人数:");
scanf("%d", &n);
head = (Student*)malloc(sizeof(Student)); // 创建头结点
head->next = NULL; // 头结点指针置空
q = head;
for (i = 0; i < n; i++) {
p = (Student*)malloc(sizeof(Student)); // 创建新结点
printf("请输入第 %d 个学生的姓名和成绩:", i+1);
scanf("%s %d", p->name, &p->score);
p->next = NULL; // 新结点指针置空
q->next = p; // 将新结点插入链表尾部
q = p; // 指针后移
}
return head;
}
// 定义输出单链表函数
void printList(Student *head) {
Student *p = head->next;
while (p != NULL) {
printf("姓名:%s,成绩:%d\n", p->name, p->score);
p = p->next;
}
}
// 定义逆置单链表函数
void reverseList(Student *head) {
if (head->next == NULL || head->next->next == NULL)
return; // 链表为空或只有一个结点,无需逆置
Student *p = head->next, *q = p->next, *r;
p->next = NULL; // 头结点指针置空
while (q != NULL) {
r = q->next;
q->next = p;
p = q;
q = r;
}
head->next = p; // 头结点指向逆置后的链表头结点
}
int main() {
Student *head = createList(); // 创建单链表并返回头结点指针
printf("原始链表信息如下:\n");
printList(head); // 输出链表信息
reverseList(head); // 逆置链表
printf("逆置后的链表信息如下:\n");
printList(head); // 输出逆置后的链表信息
return 0;
}
```
在上面的代码中,我们首先定义了一个结构体 `Student` 来存储每个学生的信息,包括姓名和成绩,并使用单链表来存储所有学生的信息。然后,我们实现了三个函数,分别是 `createList()`、`printList()` 和 `reverseList()`。
- `createList()` 函数用于根据输入信息创建单链表,返回头结点指针。
- `printList()` 函数用于输出单链表中所有结点的信息。
- `reverseList()` 函数用于将单链表逆置。
最后,在 `main()` 函数中,我们调用了上述三个函数,按照要求输出了链表信息和逆置后的链表信息。
阅读全文