链表大家编程的时候用的不多,所以也不太熟悉,今天CC哥着重讲一下,看看小伙伴们是否能够通过链表的使用能够让程序做得更有效率。
链表:在scratch里也翻译成列表。也是变量的一种,但是是一组变量。相当于一个队列。通常用在同一类的变量组。举个例子吧,比如今天天气如何?晴天?阴天?多云?雷阵雨?等等,这些就可以看成一组变量,因为都是描述天气的。再比如今天是星期几?周一到周日,7个变量,也可以看成有关周几的一组变量。这样的例子很多,比如都有哪几门功课?公园里都有哪些花?家里有哪些家具?这些都可以看成一组组的变量。
这么一解释,是不是小伙伴顿时豁然开朗,原来链表就是变量组呀,那用途是不是很广泛呢?当然我们也可以把变量组中的一个个变量拿出来定义成单独的变量,但是这样你就会发现有大量的重复编程的内容。
我们今天用一个例子来讲讲变量的用法,首先我们先解释一下链表的指令集。
CC哥创建了一个比赛的列表。第一条指令就是在列表的后面增加一个新的变量。第二条指令就是删除变量组的某一条变量。(选项里包含了末尾和全部的选项,也就是可以直接把整个列表链表清空)第三条指令是插入指令。就是在某一项前面插入一个变量(此处也有两个选项,可以插在末尾,可以随机插入某个位置)。第四条是替换掉某个变量,也就是先删除再插入了。(选项里也包括了末尾和随机两个选项)
这三条指令相当于参数的指令了。第一个是直接返回了链表中的某一项,第二个反馈整个链表有多少项。第三个是判断整个链表中是否包含某一项目。
整个看起来是不是很像最基本的数据库列表呀。
我们通过个小游戏来简单熟悉一下:我们在屏幕上画出三个轨道,让小猫们在这个三个跑道上随机的跑。
这个简单的小动画可以用很多方法实现,我们今天试试链表怎么用:
我们首先在屏幕上画三条赛道(就画三根线吧),然后我们创建一个赛道的列表,用来表示三条赛道的Y坐标。
如果变量内容简单,可以直接在创建链表的时候,直接把变量初始内容填上。点赛道变量表的左下角的小+号就可以添加变量。
当然如果变量有规律的话,也可以通过在程序里初始化阶段通过循环指令添加。这个大家可以自己研究。
程序分解:
1:不断的克隆小猫。
2:把每个克隆小猫出现的位置放在随机的赛道上。然后向右方跑。
第一部分的程序,很简单。
第二段程序:
左边的部分很简单,关键是选择赛道这条指令。这个是CC哥新建了个积木指令。指令里只有一条语句,就是设置Y坐标为赛道变量里面任意一项的值。(之所以采用新建一个选择赛道这样的指令是想大家养成一个好习惯,让编程更具可读性,和可管理性。习惯去把一组复杂的指令打包成一个指令,以后更加方便的编程和维护。)
通过这个小例子,大家是不是对链表有些熟悉啦。
CC哥仔细在网上研究了一下关于链表的经典例子,其中有一个能非常好的学习链表的例子,就是如何取不重复的随机数。比如在1到10中任意选取五个不重复的随机数。
重复的随机数大家都会选,一条指令就做到了,那不重复的随机数呢?其实不重复的随机数应用很多,比如排雷的小游戏,你就不能把两颗雷放在同一位置,还有打比赛,随机抽取比赛队伍时,就不能一个队伍选两次。很多游戏里的随机选取都是不能重复的。
当然随机选取不重复的方法也有很多,比如把随机选取出来的数字与已经选取出来的数字做一一比对,如果重复再重新选取。
如果用链表的方法,效率就比较高:
1:从链表中任意选取一项。
2:将该项从链表中删除。
3:重复第一步。
是不是很简单,这样就不会有重复的选项了。这个小程序就留给小伙伴们自己去做了。
CC哥的跟我学编程,跟其他的学习编程的课程不一样,CC哥会重点教大家编程思维逻辑。让小朋友们从小就能培养好的逻辑思维习惯,和培养优秀的思维品质。而不是教小朋友去做码农。如果你认同CC哥的理念的话,就请关注CC哥的公众号,并推荐给你的朋友们。
领取专属 10元无门槛券
私享最新 技术干货