用c语言链表实现十二生肖的存储及相关操作
时间: 2023-05-10 16:55:48 浏览: 96
好的,以下是用 C 语言链表实现十二生肖的存储及相关操作的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义一个结构体表示生肖
typedef struct Zodiac {
char name[10]; // 生肖名称
int year; // 生肖年份
struct Zodiac *next; // 指向下一个生肖的指针
} Zodiac;
// 创建一个新的生肖节点
Zodiac *create_zodiac(char *name, int year) {
Zodiac *zodiac = (Zodiac *)malloc(sizeof(Zodiac));
strcpy(zodiac->name, name);
zodiac->year = year;
zodiac->next = NULL;
return zodiac;
}
// 在链表末尾插入一个生肖节点
void insert_zodiac(Zodiac **head, Zodiac *zodiac) {
if (*head == NULL) {
*head = zodiac;
} else {
Zodiac *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = zodiac;
}
}
// 根据生肖名称查找生肖节点
Zodiac *find_zodiac_by_name(Zodiac *head, char *name) {
Zodiac *p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
return p;
}
p = p->next;
}
return NULL;
}
// 根据生肖年份查找生肖节点
Zodiac *find_zodiac_by_year(Zodiac *head, int year) {
Zodiac *p = head;
while (p != NULL) {
if (p->year == year) {
return p;
}
p = p->next;
}
return NULL;
}
// 删除指定的生肖节点
void delete_zodiac(Zodiac **head, Zodiac *zodiac) {
if (*head == zodiac) {
*head = zodiac->next;
} else {
Zodiac *p = *head;
while (p != NULL && p->next != zodiac) {
p = p->next;
}
if (p != NULL) {
p->next = zodiac->next;
}
}
free(zodiac);
}
// 打印链表中的所有生肖节点
void print_zodiac_list(Zodiac *head) {
Zodiac *p = head;
while (p != NULL) {
printf("%s (%d)\n", p->name, p->year);
p = p->next;
}
}
int main() {
// 创建链表头节点
Zodiac *head = NULL;
// 插入十二生肖节点
insert_zodiac(&head, create_zodiac("鼠", 2020));
insert_zodiac(&head, create_zodiac("牛", 2021));
insert_zodiac(&head, create_zodiac("虎", 2022));
insert_zodiac(&head, create_zodiac("兔", 2023));
insert_zodiac(&head, create_zodiac("龙", 2024));
insert_zodiac(&head, create_zodiac("蛇", 2025));
insert_zodiac(&head, create_zodiac("马", 2026));
insert_zodiac(&head, create_zodiac("羊", 2027));
insert_zodiac(&head, create_zodiac("猴", 2028));
insert_zodiac(&head, create_zodiac("鸡", 2029));
insert_zodiac(&head, create_zodiac("狗", 2030));
insert_zodiac(&head, create_zodiac("猪", 2031));
// 查找生肖节点并打印
Zodiac *zodiac = find_zodiac_by_name(head, "龙");
if (zodiac != NULL) {
printf("生肖 %s 的年份是 %d\n", zodiac->name, zodiac->year);
}
zodiac = find_zodiac_by_year(head, 2026);
if (zodiac != NULL) {
printf("年份为 %d 的生肖是 %s\n", zodiac->year, zodiac->name);
}
// 删除生肖节点并打印
zodiac = find_zodiac_by_name(head, "狗");
if (zodiac != NULL) {
delete_zodiac(&head, zodiac);
}
print_zodiac_list(head);
return 0;
}
```
希望这个代码对你有所帮助!