定义一个animal的结构体(编号 昵称 性别 品种(种类 国家、地区),使用链表来保存所有动物的信息。
实现插入动物信息(头插法实现) 、删除动物信息、根据昵称查找动物信息、遍历链表、根据编号/(昵称的字典顺序) 从大到小排序
C语言定义动物结构体,且进行保存信息
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2022-04-06 17:25关注
根据题目要求的字段定义结构体就是了,功能都是链表的基础操作
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _animal { int id; //编号 char name[20];//昵称 char sex; //性别 char type[20];//品种 char city[20]; //国家 char area[20]; //地区 struct _animal* next; }animal; //初始化链表头 animal* initList(animal* list) { list = (animal*)malloc(sizeof(animal)); list->next = 0; return list; } //头插法创建链表 void createList(animal* list) { int i, n; animal * t; printf("请输入需要插入的动物数量:"); scanf("%d", &n); for (i = 0; i < n; i++) { t = (animal*)malloc(sizeof(animal)); printf("请输入第%d个动物的编号:",i+1); scanf("%d", &t->id); printf("请输入第%d个动物的昵称:",i+1); scanf("%s", t->name); getchar();//吸收回车符 printf("请输入第%d个动物的性别:", i + 1); scanf("%c", &t->sex); printf("请输入第%d个动物的品种:", i + 1); scanf("%s", t->type); printf("请输入第%d个动物的国家:", i + 1); scanf("%s", t->city); printf("请输入第%d个动物的地区:", i + 1); scanf("%s", t->area); //插入头插法插入链表 t->next = list->next; list->next = t; } } //遍历输出动物信息 void showList(animal* list) { animal* p; if (list == 0) return; p = list->next; while (p) { printf("%8d %20s %c %20s %20s %20s\n", p->id, p->name, p->sex, p->type, p->city, p->area); p = p->next; } } //删除 根据编号删除 void deleteList(animal* list) { int id; animal* front, * p; printf("请输入需要删除的动物ID:"); scanf("%d", &id); front = list; p = front->next; while (p) { if (p->id == id) { front->next = p->next; free(p); break; } else { front = p; p = p->next; } } } //根据昵称查找动物 void findByName(animal* list) { char name[20]; animal* p = list->next; printf("请输入要查找的动物昵称:"); scanf("%s", name); while (p) { if (strcmp(p->name, name) == 0) { printf("%8d %20s %c %20s %20s %20s\n", p->id, p->name, p->sex, p->type, p->city, p->area); break; } else p = p->next; } if (p == 0) printf("未找到\n"); } //根据编号排序 void sortById(animal* L) { animal* p, * tail, * q; tail = NULL; while ((L->next->next) != tail) { p = L; q = L->next; while (q->next != tail) { if ( q->id > q->next->id ) //升序排列 /降序 { p->next = q->next; q->next = q->next->next; p->next->next = q; q = p->next; } q = q->next; p = p->next; } tail = q; } } int main() { animal* list = 0; list = initList(list); createList(list); showList(list); //查找 findByName(list); //删除 deleteList(list); printf("删除后链表:\n"); showList(list); //排序 sortById(list); printf("排序后的链表:\n"); showList(list); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 基于卷积神经网络的声纹识别
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图
- ¥15 stm32开发clion时遇到的编译问题