用c语言写一个程序,构建一个单链表,储存n个学生数据,学生数据包括学号、姓名和成绩。
时间: 2024-09-27 19:13:03 浏览: 44
在C语言中,我们可以创建一个结构体来存储学生的学号、姓名和成绩,然后利用指针的概念构造一个单链表。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
typedef struct {
int student_id; // 学号
char name[50]; // 姓名
float score; // 成绩
} Student;
// 创建一个新的节点
struct Node* createNode(int id, const char* name, float score) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->id = id;
strncpy(newNode->name, name, sizeof(newNode->name) - 1); // 注意字符串结束符'\0'
newNode->score = score;
newNode->next = NULL;
return newNode;
}
// 插入节点到链表
void insertNode(Student* data, struct Node** head) {
if (*head == NULL) {
*head = createNode(data->student_id, data->name, data->score);
} else {
struct Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = createNode(data->student_id, data->name, data->score);
}
}
// 打印链表
void printList(struct Node* head) {
struct Node* temp = head;
while (temp != NULL) {
printf("学号: %d, 姓名: %s, 成绩: %.2f\n", temp->id, temp->name, temp->score);
temp = temp->next;
}
}
int main() {
int n, i;
printf("请输入学生人数: ");
scanf("%d", &n);
Student students[n];
for (i = 0; i < n; ++i) {
printf("请输入第%d个学生的学号、姓名和成绩: ", i + 1);
scanf("%d", &students[i].student_id);
fgets(students[i].name, sizeof(students[i].name), stdin); // 防止输入换行符
students[i].name[strlen(students[i].name) - 1] = '\0'; // 删除fgets留下的换行符
scanf("%f", &students[i].score);
}
struct Node* listHead = NULL;
for (i = 0; i < n; ++i) {
insertNode(&students[i], &listHead);
}
printList(listHead);
return 0;
}
```
这个程序首先定义了一个`Student`结构体表示每个学生,然后创建了链表的头结点以及插入新节点、打印链表的方法。在`main()`函数中,用户输入n个学生的数据,然后将它们添加到链表中并打印出来。
阅读全文
相关推荐

















