【C语言】发明链表的人真是太有才啦
沙猪教写程序:
链表存在的意义主要有以下几点:
无需事先准备足够大的内存空间。链表在插入数据时,只需要确定数据的位置,即链接该数据的前一个数据和后一个数据,无需提前预留大量内存空间。
方便插入和删除操作。在链表中插入或删除数据,只需修改几个指针即可,而不需要像数组那样移动大量数据。
动态扩展内存空间。链表可以根据需要随时扩展或收缩,以适应数据的增加或减少,充分地利用了内存空间,避免了资源的浪费。
可以存储大量数据类型的数据。链表可以存储各种数据类型的数据,包括整数、浮点数、字符、字符串等等。
可以高效地进行查找和排序。链表中的元素可以通过指针直接进行访问和修改,因此可以高效地进行查找和排序操作。
方便进行动态数据的操作。例如,对于一些需要频繁插入和删除的数据,使用链表会比数组更加方便快捷。
综上所述,链表在计算机科学中被广泛应用,尤其是在需要频繁进行插入、删除操作或动态扩展内存空间的场景中,具有很高的实用价值和应用价值。
【回复】回复 @宁馨儿Nxer :看视频Σ(゚д゚;)
【回复】回复 @宁馨儿Nxer :在哪都能看到gtnh佬
【回复】回复 @宁馨儿Nxer :[笑哭]
钾-:
up推的广告《长安三万里》是什么意思?里面讲C数据结构了吗[星星眼]
【回复】因为原本B站推的是卖车广告 我觉得能看我视频的肯定买不起我就自己换了个文艺点的广告[doge]
【回复】讲的很生动,希望继续更新此系列
【回复】回复 @沙猪教写程序 :不愧是你[脱单doge]
沙猪教写程序:
完整代码在这里:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct STUDENT
{
char name【21】;
int id;
struct STUDENT *next;
};
typedef struct STUDENT STU;
int main()
{
STU *p,*head,*tail;
int n=3,i;
p=(struct STUDENT*)malloc(sizeof(struct STUDENT));
head=p;
tail=p;
head->next=NULL;
for(i=0;i<n;i++)
{
p=(struct STUDENT*)malloc(sizeof(struct STUDENT));
printf("请输入姓名:");
scanf("%s",&p->name);
printf("请输入学号:");
scanf("%d",&p->id);
tail->next=p;
tail=p;
tail->next=NULL;
}
p=head->next;
while(p!=NULL)
{
printf("姓名:%s 学号:%d\n",p->name,p->id);
p=p->next;
}
return 1;
}
【回复】回复 @笔墨画流年 :你这是教材内容吧[辣眼睛]
【回复】回复 @木几工丂 :证明你不关注我 我可是个随手附带代码的好up[脱单doge]
沙猪教写程序:
这是哪个up 一点都不火 有那么多闲时间回复大家伙问题[星星眼]
【回复】回复 @我想吃掉彦宝 :用这个落后的编译器干嘛,看看人家企业开发用啥
【回复】回复 @風チノ :这个对我来说没有用,我早就试过了,也试过把MG文件换了,不过换了之后只能运行编译过的文件
【回复】回复 @我想吃掉彦宝 :回复 @沙猪教写程序 :解决方法1:换个编译器吧,dev太难使了。[doge]
解决方法2:大量的输出到命令行中可以考虑使用缓冲区,但是考虑到你是大一的,所以我觉得应该永不太上。[doge]
AI视频小助理:
一、链表的原理和构建方法,包括使用结构体数组和指针,以及如何为指针分配内存和进行内容输入。
00:01 - 链表是一种像链条一样的存储结构
01:10 - 链表使用结构体指针连接结构体,形成链表
02:57 - 使用for循环输入链表,完成内容输入
二、链表的构建过程和遍历方式,链表可以自由扩充元素数量,存储密度高,效率高,但访问链表元素需要从头节点逐个查找。
03:00 - 使用MC函数分配内存,创建链表
04:11 - 访问链表内容,使用while循环
05:11 - 链表可以自由扩充元素数量,删除和插入操作
--本内容由AI视频小助理生成,关注解锁AI助理,由@执念蛋黄酥 召唤发送
-_ggg_-:
循环里面的tail->next=p;是不是应该是head->next = p. ???疑惑一下。
【回复】head是头结点是不变的 它所在的地方就是标记的开始处 链表的延长是从尾巴延长的所以是tail在后移
【回复】回复 @Recour重现 :要在上一个链表存放下一个链表的地址
【回复】因为开始时head的指向与tail指向是一样的。刚开始运行时,其实相当于head->next =p,但是为了后面运行所以使用tail,尾部插入,而头部head保持不变
向月亮吹哨:
还是有些不太明白的是head->next为空指针了如何连接下一个结构体 看视频感觉是一开始tail和head一样通过它的移动把下一个链接了 但是画图的时候又感觉好抽象 因为head->next始终为空指针 想问问up怎么理解呢[大哭][大哭]
【回复】回复 @凡人事真烦 :因为一开始head和tail指向的是同一个内存 所以第一次循环更改了tail就是更改了head
【回复】就跟赋值一下
a=1然后
a=2那么a的值就被更改成了2
同样开始我们给head的next指向为空 后续进行更改指向
【回复】回复 @沙猪教写程序 :但后面不是tail在不断更改指向嘛,head->next不还是null?
丶伞兵一号丶:
我看翁恺的没看懂,这个一看就懂,感觉好很多[笑哭]
KLONY:
感谢up,某985大数据在读,听老师念叨四节课云里雾里,up五分钟视频直接让我醍醐灌顶[大哭][大哭][大哭]
GLULX:
只是随便定义一个*head,即为头节点,这是约定俗成的吗?
*tail移到了指向for循环的新*p,那原本的“tail”链表结构体应该如何称呼呢???
【回复】我没看懂,最后怎么编li的
超级银河系怪兽:
//弄出3个结构体指针
STU *p,*head,*tail;
//弄出1个能装得下,前面结构体大小的内存,并且指针p指向该内存。
p=(struct S...
忒司:
谢谢up了,上课老师讲这节全念ppt看不懂,你的动图我一下就明白了[星星眼][星星眼][星星眼]
氧气毁灭者:
我把up的代码原原本本地抄了下来,为什么输入完之后遍历内容打不出来呢?
不爱吃海鲜的GaN:
stu*p,*head,*tail三个指针是不是只有p默认指向结构体?
寒林空见日斜时1:
链表就得动态去讲解 这个视频非常棒!
道具西北:
我去终于来个救命的博主,看翁恺老师讲的我都傻眼了!投币了