建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等于此年龄,则将此节点删去。C语言写
时间: 2024-03-22 18:39:27 浏览: 124
C语言:定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表.zip
5星 · 资源好评率100%
好的,以下是使用 C 语言编写的程序,实现了建立链表、删除指定年龄节点的功能。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct Node {
int student_id; // 学号
char name[20]; // 姓名
char gender; // 性别
int age; // 年龄
struct Node *next; // 指向下一个节点的指针
} Node;
// 定义链表结构体
typedef struct LinkedList {
Node *head; // 头节点指针
} LinkedList;
// 在链表尾部添加新节点
void add_node(LinkedList *linked_list, int student_id, char *name, char gender, int age) {
Node *new_node = (Node*)malloc(sizeof(Node)); // 创建新节点
new_node->student_id = student_id;
strcpy(new_node->name, name);
new_node->gender = gender;
new_node->age = age;
new_node->next = NULL;
if (linked_list->head == NULL) { // 如果链表为空,将新节点设置为头节点
linked_list->head = new_node;
} else {
Node *current_node = linked_list->head;
while (current_node->next != NULL) { // 找到链表尾部节点
current_node = current_node->next;
}
current_node->next = new_node; // 在尾部插入新节点
}
}
// 删除年龄为 age 的节点
void delete_node(LinkedList *linked_list, int age) {
Node *current_node = linked_list->head;
Node *prev_node = NULL;
while (current_node != NULL) {
if (current_node->age == age) { // 找到年龄为 age 的节点
if (prev_node == NULL) { // 如果是头节点
linked_list->head = current_node->next;
} else { // 如果是非头节点
prev_node->next = current_node->next;
}
free(current_node); // 释放内存
return;
}
prev_node = current_node;
current_node = current_node->next;
}
}
// 输出链表
void print_list(LinkedList *linked_list) {
Node *current_node = linked_list->head;
while (current_node != NULL) {
printf("学号:%d,姓名:%s,性别:%c,年龄:%d\n", current_node->student_id, current_node->name, current_node->gender, current_node->age);
current_node = current_node->next;
}
}
int main() {
LinkedList *linked_list = (LinkedList*)malloc(sizeof(LinkedList)); // 创建链表
linked_list->head = NULL; // 初始化头节点指针为空
// 添加节点
add_node(linked_list, 1, "张三", 'M', 20);
add_node(linked_list, 2, "李四", 'F', 22);
add_node(linked_list, 3, "王五", 'M', 20);
add_node(linked_list, 4, "赵六", 'F', 19);
printf("删除年龄为 20 的节点前:\n");
print_list(linked_list);
// 删除年龄为 20 的节点
delete_node(linked_list, 20);
printf("删除年龄为 20 的节点后:\n");
print_list(linked_list);
return 0;
}
```
在程序中,我们首先定义了 `Node` 结构体作为链表节点,包括学号、姓名、性别、年龄和指向下一个节点的 `next` 指针。然后定义了 `LinkedList` 结构体作为链表,包括头节点指针 `head` 和三个操作链表的函数:添加节点、删除年龄为 age 的节点和输出链表。在 `main` 函数中,我们创建了一个链表,并添加了四个节点。然后输出链表,并删除了年龄为 20 的节点,再次输出链表。注意,需要使用 `malloc` 函数动态分配内存来创建节点和链表。最后,需要在删除节点时释放内存,避免内存泄漏。
阅读全文