C语言定义动物结构体,且进行保存信息

定义一个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;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632