2)建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等于此年龄,则将此节点删去。用C语言编写
时间: 2024-03-17 20:44:21 浏览: 68
输入年龄,若和链表内节点相同,删除该节点
可以使用以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
struct Student {
int id;
char name[20];
char gender;
int age;
struct Student *next;
};
typedef struct Student Student;
// 创建链表
Student *createList(int n) {
Student *head = NULL, *tail = NULL;
for (int i = 0; i < n; i++) {
Student *node = (Student *) malloc(sizeof(Student));
printf("请输入第%d个学生的信息(学号 姓名 性别 年龄):", i + 1);
scanf("%d %s %c %d", &node->id, node->name, &node->gender, &node->age);
node->next = NULL;
if (head == NULL) {
head = node;
} else {
tail->next = node;
}
tail = node;
}
return head;
}
// 删除指定年龄的节点
void deleteNode(Student **head, int age) {
Student *p = NULL, *q = *head;
while (q != NULL) {
if (q->age == age) {
if (p == NULL) {
*head = q->next;
} else {
p->next = q->next;
}
free(q);
q = NULL;
return;
} else {
p = q;
q = q->next;
}
}
printf("链表中不存在年龄为%d的学生!\n", age);
}
// 输出链表
void printList(Student *head) {
while (head != NULL) {
printf("%d %s %c %d\n", head->id, head->name, head->gender, head->age);
head = head->next;
}
}
int main() {
int n, age;
printf("请输入学生人数:");
scanf("%d", &n);
Student *head = createList(n);
printf("请输入要删除的年龄:");
scanf("%d", &age);
deleteNode(&head, age);
printf("\n删除后的链表:\n");
printList(head);
return 0;
}
```
程序中首先定义了一个学生结构体。`createList`函数用于创建一个包含n个学生节点的链表,并返回链表的头指针。`deleteNode`函数用于删除链表中年龄为age的学生节点,如果链表中不存在年龄为age的学生,则输出提示信息。`printList`函数用于输出链表的所有学生节点信息。在`main`函数中,首先输入学生人数和要删除的年龄,然后调用`createList`函数创建链表,调用`deleteNode`函数删除年龄为age的学生节点,最后调用`printList`函数输出链表的所有学生节点信息。
阅读全文