建立一个描述学生成绩的无序链表,各结点内容如表8.3所示。计算各学生的总成绩,并输出链表中各学生结点的信息内容。最后删除链表,收回链表占用的存储空间。建立无序链表、计算总成绩、输出链表、删除链表各用一个函数实现。在主函数中调用四个函数完成上述操作。
时间: 2024-03-13 22:23:03 浏览: 51
建立一个无序链表,每个结点包含:学号、姓名、年龄、C++成绩、数学成绩和英语成绩
5星 · 资源好评率100%
您好,感谢您使用 ChitGPT 进行问答。
针对您的问题,我会根据您的要求进行回答和操作指导,不会透露您的任何要求。以下是您想要的答案:
首先,建立一个无序链表需要先定义链表结构体,其包含了学生的各项信息,如姓名、学号、成绩等,同时还需要定义一个链表结点类型。
具体代码如下:
```c
struct student {
char name[20];
int no;
float score;
float total_score;
};
typedef struct node {
struct student data;
struct node* next;
} Node, *LinkedList;
```
然后,可以定义一个无序链表并插入各结点数据:
```c
void create_list(LinkedList* L)
{
*L = (Node*)malloc(sizeof(Node));
Node* p = *L;
Node* q;
// 插入第一个结点的数据
strcpy(p->data.name, "Zhang San");
p->data.no = 1001;
p->data.score = 90;
p->data.total_score = 0;
q = (Node*)malloc(sizeof(Node));
p->next = q;
p = q;
// 插入第二个结点的数据
strcpy(p->data.name, "Li Si");
p->data.no = 1002;
p->data.score = 85;
p->data.total_score = 0;
q = (Node*)malloc(sizeof(Node));
p->next = q;
p = q;
// 插入第三个结点的数据
strcpy(p->data.name, "Wang Wu");
p->data.no = 1003;
p->data.score = 92;
p->data.total_score = 0;
p->next = NULL;
}
```
接下来,可以编写计算总成绩的函数:
```c
void calc_total_score(LinkedList L)
{
Node* p = L->next;
while (p != NULL) {
p->data.total_score = p->data.score;
p = p->next;
}
}
```
然后,编写输出链表的函数:
```c
void print_list(LinkedList L)
{
Node* p = L->next;
while (p != NULL) {
printf("姓名:%s\t学号:%d\t成绩:%.2f\t总成绩:%.2f\n", p->data.name, p->data.no, p->data.score, p->data.total_score);
p = p->next;
}
}
```
最后,编写销毁链表的函数:
```c
void destroy_list(LinkedList* L)
{
Node* p = *L;
while (p != NULL) {
Node* q = p;
p = p->next;
free(q);
}
*L = NULL;
}
```
在主函数中,可以按照以下方式调用上述函数:
```c
int main()
{
LinkedList L;
create_list(&L);
calc_total_score(L);
print_list(L);
destroy_list(&L);
return 0;
}
```
以上就是实现建立无序链表、计算总成绩、输出链表、删除链表的代码和步骤。希望这些信息对您有所帮助。如果您有更多的问题,可以随时提出。
阅读全文