〈1)写西数创建单向链表并存储学生成绩信息,输入工和ecore按逗号隔开,先输入score后输入工D,当ecore(O时链表创建完成,并输出创建后的链表信息。 (2)写函数实现在第口个结点后面插入一个新结点,并输出插入 新结点后的链表信息。 (3)写函数释放链表所占内存空间。 (在主函数依次调用各函数即可)
时间: 2023-12-10 16:37:59 浏览: 108
下面是一个简单的实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 学生信息结构体
typedef struct student {
char id;
int score;
struct student* next;
} Student;
// 创建链表
void createList(Student** head) {
Student* tail = NULL;
char id;
int score;
while (1) {
scanf("%d,%c", &score, &id);
if (id == 'O') {
break;
}
Student* node = (Student*)malloc(sizeof(Student));
node->id = id;
node->score = score;
node->next = NULL;
if (*head == NULL) {
*head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
}
// 插入新结点
void insertNode(Student* head) {
int pos;
printf("请输入插入位置:");
scanf("%d", &pos);
Student* node = (Student*)malloc(sizeof(Student));
printf("请输入新结点的学号和成绩:");
scanf("%d,%c", &(node->score), &(node->id));
Student* p = head;
int i = 1;
while (p != NULL && i < pos) {
p = p->next;
i++;
}
if (p == NULL) {
printf("插入位置无效!\n");
} else {
node->next = p->next;
p->next = node;
}
}
// 释放链表所占内存空间
void freeList(Student** head) {
Student* p = *head;
while (p != NULL) {
Student* q = p->next;
free(p);
p = q;
}
*head = NULL;
}
// 输出链表信息
void printList(Student* head) {
Student* p = head;
printf("学号 成绩\n");
while (p != NULL) {
printf("%c %d\n", p->id, p->score);
p = p->next;
}
}
int main() {
Student* head = NULL;
createList(&head);
printList(head);
insertNode(head);
printList(head);
freeList(&head);
return 0;
}
```
注意,这只是一个简单的示例,实际情况下可能需要考虑更多的细节问题。
阅读全文