定义一个animal的结构体(编号 昵称 性别 品种(种类 国家、地区),使用链表来保存所有动物的信息。
实现插入动物信息(头插法实现) 、删除动物信息、根据昵称查找动物信息、遍历链表、根据编号/(昵称的字典顺序) 从大到小排序
根据题目要求的字段定义结构体就是了,功能都是链表的基础操作
#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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!