用c语言写建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等于此年龄,则将此节点删去。
时间: 2023-12-04 19:21:09 浏览: 56
输入年龄,若和链表内节点相同,删除该节点
好的,那么我将为您提供一个C语言代码示例,来实现您描述的链表操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义一个学生结构体
struct student {
int id;
char name[50];
char gender;
int age;
struct student *next;
};
//定义一个函数,用于向链表中添加一个节点
void add_node(struct student **head, int id, char *name, char gender, int age) {
struct student *new_node = (struct student *)malloc(sizeof(struct student));
new_node->id = id;
strcpy(new_node->name, name);
new_node->gender = gender;
new_node->age = age;
new_node->next = NULL;
if (*head == NULL) {
*head = new_node;
} else {
struct student *temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = new_node;
}
}
//定义一个函数,用于从链表中删除一个节点
void delete_node(struct student **head, int age) {
if (*head == NULL) {
printf("链表为空,无法删除节点。\n");
return;
}
struct student *temp = *head;
struct student *prev = NULL;
while (temp != NULL) {
if (temp->age == age) {
if (prev == NULL) {
*head = temp->next;
} else {
prev->next = temp->next;
}
free(temp);
printf("已删除年龄为%d的学生。\n", age);
return;
}
prev = temp;
temp = temp->next;
}
printf("未找到年龄为%d的学生。\n", age);
}
//定义一个函数,用于打印链表中的所有节点
void print_list(struct student *head) {
if (head == NULL) {
printf("链表为空。\n");
return;
}
struct student *temp = head;
printf("学号\t姓名\t性别\t年龄\n");
while (temp != NULL) {
printf("%d\t%s\t%c\t%d\n", temp->id, temp->name, temp->gender, temp->age);
temp = temp->next;
}
}
int main() {
struct student *head = NULL;
//向链表中添加节点
add_node(&head, 1001, "张三", 'M', 20);
add_node(&head, 1002, "李四", 'F', 18);
add_node(&head, 1003, "王五", 'M', 22);
add_node(&head, 1004, "赵六", 'F', 19);
//打印链表中的所有节点
printf("删除前的链表:\n");
print_list(head);
//从链表中删除年龄为18的节点
delete_node(&head, 18);
//打印链表中的所有节点
printf("删除后的链表:\n");
print_list(head);
return 0;
}
```
这是一个基本的链表操作代码示例,您可以根据需要进行修改和调整。在这个示例中,我们通过定义一个结构体 `student` 来表示每个节点,然后通过 `add_node` 函数向链表中添加节点,通过 `delete_node` 函数删除链表中的节点,通过 `print_list` 函数打印链表中的所有节点。
阅读全文