辰墟 2022-04-06 17:22 采纳率: 100%
浏览 23
已结题

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

定义一个animal的结构体(编号 昵称 性别 品种(种类 国家、地区),使用链表来保存所有动物的信息。
实现插入动物信息(头插法实现) 、删除动物信息、根据昵称查找动物信息、遍历链表、根据编号/(昵称的字典顺序) 从大到小排序

  • 写回答

2条回答 默认 最新

  • 关注

    根据题目要求的字段定义结构体就是了,功能都是链表的基础操作

    
    
    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月11日
  • 已采纳回答 1月3日
  • 创建了问题 4月6日

悬赏问题

  • ¥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时遇到的编译问题