• DAY13 链表


    数组

    静态数组

    例子 :
    int nums[5] = {0};
    struct person ps[5];
    缺点 :
            1,无法修改地址
            2,无法动态定义长度
            3,占用内存过大或过小
            4,增删速度慢
    优点
            数组的内存是连续开辟的, 所以读取速度快

    动态数组

    例子 :
    int *nums = (int *) calloc(5,sizeof(int));
    struct person *ps = (struct person *)calloc(5,sizeof(struct
    person));
    缺点 :
            增删速度慢
            编写代码较为复杂
    优点 :
            读取效率高

    常用的数据结构

    1, 数组结构 : 内存连续开辟 ,
    2, 链表结构 : 离散开辟
    3,
    4, 二叉树 ( 均衡二叉树 , 非均衡二叉树 )
    5,

    链表结构

    分类:

    单链表

            一个节点只记录下一个节点的地址

    双链表

            一个节点即记录下一个节点的地址,也记录上一个节点的地址

    设计节点

    将多个学员信息设计为链表

    单链表节点设计

    typedef struct student

    {
    // 数据域
            char name[50];
            char sex[5];
            int num;
            double score;
    // 指针域
            struct student *next;
    }Stu;

    双链表节点设计

    typedef struct student
    {
    // 数据域
            char name[50];
            char sex[5];
            int num;
            double score;
    // 指针域
            struct student *next;
            struct student *head;
    }Stu;

    总结

    typedef struct 结构体名称
    {
    // 数据域
    // 指针域
    } 别名 ;

    静态链表

    #include
    // 设计的节点
    typedef struct student
    {
    // 数据域
            char name[50];
            char sex[5];
            int num;
            double score;
    // 指针域
            struct student *next;
    }Stu;
    int main(int argc, char const *argv[])
    {
            Stu s01 = {"张三 "," ",1,99,NULL};
            Stu s02 = {"李四 "," ",2,69,NULL};
            Stu s03 = {"王五 "," ",3,9,NULL};
            Stu s04 = {"马六 "," ",4,79,NULL};
            Stu s05 = {"候七 "," ",5,92,NULL};
            Stu *head = &s01;//将 s01 做完首节点
            s01.next = &s02;//将 s02 设置为 s01 的下一个节点
            s02.next = &s03;//将 s03 设置为 s02 的下一个节点
            s03.next = &s04;//将 s04 设置为 s03 的下一个节点
            s04.next = &s05;//将 s05 设置为 s04 的下一个节点
    // 链表的遍历
    //pd 当前节点
            Stu *pd = head;
            while(pd != NULL)
            {
            printf("%s %s %d %.2lf\n",pd->name,pd->sex,pd->num,pd->score);
    // 将下一个节点作为下一轮的当前节点
            pd = pd->next;
            }
            return 0;
    }

    动态链表

    #include
    #include
    #include
    // 设计的节点
    typedef struct student
    {
    // 数据域
            char name[50];
            char sex[5];
            int num;
            double score;
    // 指针域
            struct student *next;
    }Stu;
    int main(int argc, char const *argv[])
    {
            Stu *s01 = calloc(1,sizeof(Stu));
            strcpy(s01->name,"张三 ");
            strcpy(s01->sex,"男 ");
            s01->num = 1;
            s01->score = 99;
            Stu *s02 = calloc(1,sizeof(Stu));
            strcpy(s02->name,"张三 2");
            strcpy(s02->sex,"男 ");
            s02->num = 1;
            s02->score = 99;
            Stu *s03 = calloc(1,sizeof(Stu));
            strcpy(s03->name,"张三 3");
            strcpy(s03->sex,"男 ");
            s03->num = 1;
            s03->score = 99;
            Stu *s04 = calloc(1,sizeof(Stu));
            strcpy(s04->name,"张三 4");
            strcpy(s04->sex,"男 ");
            s04->num = 1;
            s04->score = 99;
            Stu *s05 = calloc(1,sizeof(Stu));
            strcpy(s05->name,"张三 5");
            strcpy(s05->sex,"男 ");
            s05->num = 1;
            s05->score = 99;
            Stu *head = s01;//将 s01 做完首节点
            s01->next = s02;//将 s02 设置为 s01 的下一个节点
            s02->next = s03;//将 s03 设置为 s02 的下一个节点
            s03->next = s04;//将 s04 设置为 s03 的下一个节点
            s04->next = s05;//将 s05 设置为 s04 的下一个节点
    // 链表的遍历
    //pd 当前节点
            Stu *pd = head;
            while(pd != NULL)
            {
            printf("%s %s %d %.2lf\n",pd->name,pd->sex,pd->num,pd->score);
    // 将下一个节点作为下一轮的当前节点
            pd = pd->next;
            }
            return 0;
    }

  • 相关阅读:
    linux升级glibc-2.28
    基于SSM的新能源汽车在线租赁系统
    C#进阶一刻钟抽象设计一个入门业务类,函数方法
    交叉编译opencv时,无法安装cmake-gui
    C++ 学习(18)STL - deque容器、stack容器、queue容器
    数据结构c语言版第二版(严蔚敏)第四章笔记
    Ubuntu 搜狗输入法无法输入中文解决方案(不需要重装,不需要重启服务器)
    vivo 海量微服务架构最新实践
    Java面试(JVM篇)——JVM 面试题合集 & 深入理解JVM虚拟机
    Android中依赖版本统一管理
  • 原文地址:https://blog.csdn.net/aisheisadas/article/details/134296252