定义函数void CreateList(int n):按学号由小到大,建立有序的链表。逆序输入n个学生信息(调用n次input),学号大的先输入,建立带头结点的单链表。
时间: 2024-04-11 12:26:32 浏览: 20
你可以按照以下步骤来实现 `CreateList` 函数:
1. 定义一个结构体来表示学生信息,包含学号和其他相关信息。
2. 定义一个链表节点的结构体,包含指向学生信息的指针和指向下一个节点的指针。
3. 定义一个头节点,并将其初始化为空(即指向 `NULL`)。
4. 在 `CreateList` 函数中,循环 `n` 次,每次调用 `input` 函数获取学生信息。
5. 创建一个新的链表节点,并将学生信息存储在其中。
6. 遍历链表,找到插入位置以保持链表有序。
7. 将新节点插入到链表中。
8. 最后返回链表的头节点。
以下是一种可能的实现方式(使用 C 语言):
```c
#include <stdio.h>
#include <stdlib.h>
// 学生信息结构体
struct Student {
int id;
// 其他相关信息...
};
// 链表节点结构体
struct Node {
struct Student* student;
struct Node* next;
};
// 输入学生信息函数
void input(struct Student* stu) {
printf("请输入学号: ");
scanf("%d", &(stu->id));
// 输入其他相关信息...
}
// 创建有序链表函数
void CreateList(int n) {
struct Node* head = NULL;
int i;
for (i = 0; i < n; i++) {
// 输入学生信息
struct Student* stu = malloc(sizeof(struct Student));
input(stu);
// 创建新节点
struct Node* newNode = malloc(sizeof(struct Node));
newNode->student = stu;
newNode->next = NULL;
// 遍历链表,找到插入位置
struct Node* curr = head;
struct Node* prev = NULL;
while (curr != NULL && curr->student->id < stu->id) {
prev = curr;
curr = curr->next;
}
// 将新节点插入链表
if (prev == NULL) {
// 插入头部
newNode->next = head;
head = newNode;
} else {
// 插入中间或尾部
prev->next = newNode;
newNode->next = curr;
}
}
// 返回链表头节点
return head;
}
int main() {
int n;
printf("请输入学生数量: ");
scanf("%d", &n);
struct Node* listHead = CreateList(n);
// 遍历链表并打印学生信息
struct Node* curr = listHead;
while (curr != NULL) {
printf("学号: %d\n", curr->student->id);
// 打印其他相关信息...
curr = curr->next;
}
// 释放链表内存
curr = listHead;
while (curr != NULL) {
struct Node* temp = curr;
curr = curr->next;
free(temp->student);
free(temp);
}
return 0;
}
```
注意:上述代码仅为示例,可能还需要根据实际情况进行修改和完善。