DAY13 链表

编程入门 行业动态 更新时间:2024-10-24 06:34:29

DAY13 <a href=https://www.elefans.com/category/jswz/34/1769662.html style=链表"/>

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 <stdio.h> // 设计的节点 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 <stdio.h> #include <stdlib.h> #include <string.h> // 设计的节点 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; }

更多推荐

DAY13 链表

本文发布于:2023-11-15 23:05:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1608614.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:链表

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!