用c语言建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包括的年龄等于此年龄,则从结点中删去
时间: 2024-05-04 08:21:22 浏览: 100
以下是用C语言建立链表,并删除指定年龄结点的代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct student {
int id;
char name[20];
char gender;
int age;
struct student *next;
};
int main() {
struct student *head, *p, *q;
int age;
// 初始化链表头节点
head = (struct student *)malloc(sizeof(struct student));
head->next = NULL;
// 输入学生信息并插入链表
printf("请输入学生信息(id,name,gender,age,以0结束):\n");
q = head;
while (1) {
p = (struct student *)malloc(sizeof(struct student));
scanf("%d", &p->id);
if (p->id == 0) {
break;
}
scanf("%s %c %d", p->name, &p->gender, &p->age);
p->next = NULL;
q->next = p;
q = p;
}
// 输入指定年龄并删除对应结点
printf("请输入要删除的年龄:\n");
scanf("%d", &age);
p = head->next;
q = head;
while (p != NULL) {
if (p->age == age) {
q->next = p->next;
free(p);
p = q->next;
} else {
q = p;
p = p->next;
}
}
// 输出链表
printf("学生信息如下:\n");
p = head->next;
while (p != NULL) {
printf("%d %s %c %d\n", p->id, p->name, p->gender, p->age);
p = p->next;
}
// 释放内存
p = head;
while (p != NULL) {
q = p;
p = p->next;
free(q);
}
return 0;
}
```
注意在删除结点时,需要用一个指针`q`来记录当前结点的前一个结点,以便修改其`next`指针。同时,删除结点后需要释放其内存。
阅读全文