链表实现,修改读者信息,c语言版
时间: 2023-11-14 12:05:30 浏览: 40
链表实现读者信息的修改主要涉及以下几个步骤:
1. 定义一个读者信息结构体,包括读者编号、姓名、性别、年龄等字段。
2. 定义一个链表结构体,包括头节点指针、尾节点指针等字段。
3. 定义一个函数用于向链表中添加读者信息节点。
4. 定义一个函数用于修改链表中指定读者信息节点的内容。
下面是具体的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 读者信息结构体
typedef struct reader {
int id; // 读者编号
char name[20]; // 读者姓名
char gender[5]; // 读者性别
int age; // 读者年龄
struct reader *next;// 指向下一个节点的指针
} Reader;
// 链表结构体
typedef struct list {
Reader *head; // 头节点指针
Reader *tail; // 尾节点指针
} List;
// 向链表中添加读者信息节点
void add_reader(List *list, Reader *r) {
if (list->head == NULL) {
// 如果链表为空,将头节点和尾节点都指向新节点
list->head = r;
list->tail = r;
r->next = NULL;
} else {
// 如果链表不为空,在尾节点后添加新节点
list->tail->next = r;
list->tail = r;
r->next = NULL;
}
}
// 修改链表中指定读者信息节点的内容
void modify_reader(List *list, int id) {
Reader *p = list->head;
while (p != NULL && p->id != id) {
p = p->next;
}
if (p == NULL) {
printf("没有找到读者编号为 %d 的读者\n", id);
} else {
printf("请输入新的读者信息:\n");
printf("读者编号:");
scanf("%d", &p->id);
printf("读者姓名:");
scanf("%s", p->name);
printf("读者性别:");
scanf("%s", p->gender);
printf("读者年龄:");
scanf("%d", &p->age);
printf("读者信息修改成功!\n");
}
}
int main() {
List list = {NULL, NULL};
Reader *r1 = (Reader *)malloc(sizeof(Reader));
r1->id = 1;
strcpy(r1->name, "张三");
strcpy(r1->gender, "男");
r1->age = 20;
add_reader(&list, r1);
Reader *r2 = (Reader *)malloc(sizeof(Reader));
r2->id = 2;
strcpy(r2->name, "李四");
strcpy(r2->gender, "女");
r2->age = 22;
add_reader(&list, r2);
modify_reader(&list, 1);
modify_reader(&list, 3);
return 0;
}
```
上面的代码中,我们首先定义了一个读者信息结构体和一个链表结构体,并实现了向链表中添加读者信息节点和修改链表中指定读者信息节点的内容的函数。在 `main` 函数中,我们创建了两个读者信息节点并加入到链表中,然后分别调用 `modify_reader` 函数修改链表中对应节点的内容。需要注意的是,如果要修改的节点不存在,我们需要给出相应的提示。