欢迎大家来到IT世界,在知识的湖畔探索吧!
数组是一系列连续的内存空间,访问容易可以通过下标来指定访问的元素;如果需要1w个较大的连续的内存空间,估计不太好找。这样就会创建数组失败。链表不需要连续的内存,是零散的内存空间(见缝插针),通过结构体里面的指针,来指向下一个结构的地址,就是访问的时候(运气差)需要把所有元素都访问一遍。
#include<stdio.h> #include<stdlib.h>//内存头文件 #include<string.h>//字符串头文件 #define Y 40 char* dgets(char*, int); struct DIAN //创建一个简单的结构体 { char name[Y]; //用于存放名字 struct DIAN* n;//用于指向下一个结构的指针 }; int main(void) { struct DIAN* p = NULL;//创建一个链表的头指针 struct DIAN* a, * b; //a用来申请内存空间,b用来指向下一个内存空间的地址 char name1[Y]; printf("请输入你所有朋友的名字\n"); /*收集信息*/ while (dgets(name1, Y) != NULL && name1[0] != '\0')//对输入进行判断 { a = (struct DIAN*)malloc(sizeof(struct DIAN));//申请一块(struct DIAN*)类型大小的内存 if (p == NULL)//p在前面定义的为NULL,(只有p为null的时候才把a申请的内存给p) p = a; //把p指向a申请的第一块内存 else b->n = a;//(a继续申请结构体内存的话,把上一个结构体里面的n指针,指向a) a->n = NULL;//把a申请的结构体里面的n指针指向NULL,代表链表的末尾 strcpy(a->name, name1);//把用户输入的数据,拷贝到结构体name里面 printf("请继续输入如要结束请按确认键\n");//提醒用户是否继续输入或者退出 b = a;//b指向a申请的内存(上一个结构体) } /*打印信息*/ if (p == NULL)//如果p是NULL的话,证明里面没有数据 printf("你没有输入数据"); else printf("你朋友的名字分别是\n"); a = p;//a指针指向p while (a != NULL)//如果a指向NULL,证明已经到链表末尾了 { printf("%s\n", a->name);//打印链表里面的数据 a = a->n;//把a指向的结构体里面的指针给a } return 0; } char* dgets(char* m, int i) { char* l; char* n; l = fgets(m, i, stdin); if (l) { n = strchr(m, '\n'); if (n) *n = '\0'; else while (getchar() != '\n') continue; } return l; }
欢迎大家来到IT世界,在知识的湖畔探索吧!
目前我就学到基本链表,掌握的也不太透彻,
后面的接口与二叉树难度有点大,我决定放弃!从明天起将不再更新C语言。后面我先学习一遍python然后再把笔记分享给大家,中间可能停更的时间久一点。谢谢目前我63个粉丝的关注
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/75935.html