C语言利用链表实现学生成绩管理系统的完整攻略分为以下几个步骤:
1. 设计数据结构
在设计链表之前,需要先设计数据结构来存储学生信息。通常会设计一个结构体,用来存储学生的姓名、学号、成绩等信息。例如:
typedef struct Student {
int num; // 学号
char name[MAXLEN]; // 姓名
int score; // 成绩
struct Student *next; // 指向下一个节点的指针
} Node;
其中,next
是指向下一个节点的指针,如果链表中有多个节点,每个节点都必须有 next
属性。
2. 创建链表
创建链表需要使用 malloc()
函数,该函数可以为节点分配内存空间,并返回一个指向该内存空间的指针。可以利用 while()
循环来创建链表,每次循环新建一个节点,并将其添加到链表的末尾,直到数据输入结束。
Node *createList() {
Node *head, *p, *t;
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
t = head;
printf("请依次输入学生的学号、姓名、成绩(输入-1结束):\n");
while (1) {
p = (Node*)malloc(sizeof(Node));
scanf("%d", &p->num);
if (p->num == -1) {
free(p);
break;
}
scanf("%s%d", p->name, &p->score);
t->next = p;
p->next = NULL;
t = p;
}
return head;
}
以上实现的是在链表尾部插入节点的方法。也可以在头部、中间插入节点,关键点是要确定插入的位置。
3. 遍历链表
遍历链表可以使用 while()
循环,直到遇到指向 NULL
的指针代表链表到达结尾。
void traverseList(Node *head) {
Node *p;
p = head->next;
while (p != NULL) {
printf("%d\t%s\t%d\n", p->num, p->name, p->score);
p = p->next;
}
}
4. 删除节点
删除链表的一个节点需要先找到该节点,然后将其从链表中删除。可以使用 while()
循环来查找该节点,并使用 free()
函数来释放该节点占用的内存空间。例如:
void deleteNode(Node *head, int num) {
Node *p, *q;
q = head;
p = head->next;
while (p != NULL) {
if (num == p->num) {
q->next = p->next;
printf("成功删除学号为 %d 的学生信息\n", num);
free(p);
return;
}
q = p;
p = p->next;
}
printf("未找到学号为 %d 的学生信息\n", num);
}
5. 修改节点
修改链表的一个节点需要先找到该节点,然后根据要修改的内容对该节点进行修改。可以用 while()
循环来查找该节点,并使用 strcpy()
函数来改变该节点的姓名, scanf()
函数来更新该节点的成绩。例如:
void updateNode(Node *head, int num) {
Node *p;
p = head->next;
while (p != NULL) {
if (num == p->num) {
printf("原信息:学号:%d,姓名:%s,成绩:%d\n", p->num, p->name, p->score);
printf("输入新的姓名和成绩:");
scanf("%s%d", p->name, &p->score);
printf("成功修改学号为 %d 的学生信息\n", num);
return;
}
p = p->next;
}
printf("未找到学号为 %d 的学生信息\n", num);
}
示例1:创建包含3个学生的链表,遍历该链表,删除学号为2的学生信息,再次遍历链表。
int main() {
Node *l;
l = createList();
printf("学生信息如下:\n");
traverseList(l);
deleteNode(l, 2);
printf("删除后学生信息如下:\n");
traverseList(l);
return 0;
}
示例2:创建包含2个学生的链表,遍历该链表,修改学号为1的学生成绩,再次遍历链表。
int main() {
Node *l;
l = createList();
printf("学生信息如下:\n");
traverseList(l);
updateNode(l, 1);
printf("修改后学生信息如下:\n");
traverseList(l);
return 0;
}
以上为 C语言利用链表实现学生成绩管理系统的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言利用链表实现学生成绩管理系统 - Python技术站