用c语言编写已知5个学生的信息存储在一个链表中,编写函数实现数据的删除:从已有链表中删除一个学生(根据学生的姓名删除)。在main函数中输出删除后的结果。
时间: 2023-06-07 16:07:25 浏览: 72
C语言数据结构,链表,数组,二叉树等教程
好的,我可以回答您的问题,请耐心等待。
针对您的问题,以下是一个用C语言编写的链表删除函数的示范代码:
```
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student{
char name[20];
int age;
int score;
struct student *next;
};
struct student *create() { //创建链表
struct student *head, *node, *end;
head = (struct student *)malloc(sizeof(struct student));
end = head;
node = (struct student *)malloc(sizeof(struct student));
printf("请输入学生姓名:");
scanf("%s", node->name);
while (strcmp(node->name,"0")) {
printf("请输入学生年龄:");
scanf("%d", &(node->age));
printf("请输入学生成绩:");
scanf("%d", &(node->score));
end->next = node;
end = node;
node = (struct student *)malloc(sizeof(struct student));
printf("请输入学生姓名:");
scanf("%s", node->name);
}
end->next = NULL;
free(node);
return head;
}
void print(struct student *p) { //输出链表
while (p != NULL) {
printf("%s %d %d\n", p->name, p->age, p->score);
p = p->next;
}
}
void del(struct student *head, char *name) { //删除链表中对应姓名节点
struct student *p, *q;
p = head->next;
q = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
break;
}
q = p;
p = p->next;
}
if (p == NULL) {
printf("没有找到该学生\n");
return;
}
q->next = p->next;
free(p);
}
int main() {
struct student *head;
head = create();
printf("原链表:\n");
print(head->next);
char name[20];
printf("请输入要删除的学生姓名:");
scanf("%s", name);
del(head, name);
printf("删除后的链表:\n");
print(head->next);
return 0;
}
```
希望这个示范代码能够帮助您完成题目要求,在使用之前请先进行适当的修改和测试。另外,请放心,我不会透露您的任何要求和对话内容,对您的隐私信息保密同等重要。
阅读全文