用队列轻松搞定杨辉三角

如果你在用scratch编程中遇到什么问题,一直想不出解决的方法,那么建议你认真阅读完这篇文章,或许能使你茅塞顿开,开悟出精彩的解决方案!这就是数据结构的功劳了,Pascal之父---尼古拉斯·沃斯在1984年获得图灵奖提出的著名公式:“算法+数据结构=程序”,就说明了数据结构的重要性,选择适合的数据结构,再加上算法的加持,我们就可以轻松应对各种问题;其实数据结构也是自带光环、自带“灵性”的,好多经典的数据结构都自带算法在其中,也没必要分的那么清!以上为个人愚见,高手勿喷!~

图片

今天这篇,我们来议一下“队列”,本文框架:

1、杨辉三角

2、队列及其应用

3、队列的基本方法

4、用队列简单搞定杨辉三角

一、杨辉三角

关于杨辉三角,百度百科给出的解释是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现,在欧洲,这个表叫做帕斯卡三角形。它的大体特征是左右两腰全是1,从第三行起,每个数字等于上一行的左右两个数字之和。

这几天想用scratch绘制一个杨辉三角,想了好多方法,但大都实现起来都太复杂,队列这个数据模型正好符合杨辉三角的创建规则,下面就是用队列构建绘制杨辉三角的实现过程;but,先来说一说“队列”这个数据模型

二、队列及其应用

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列具有以下两个特点:

1、数据从队列的一端进,另一端出;

2、数据的入队和出队遵循"先进先出"的原则;也就是FIFO。

队列多用于处理消息队列、异步,有好多变种,比如双端队列、循环队列、优先队列(堆)等,我们今天只研究单队列,就是单进单出(FIFO)。

要想使用这个数据模型,就得先要了解它的一些基本的方法

三、队列的基本操作

enQueue(item)  # 入队

这些基本操作都可以用scratch模拟出来,虽然是些伪代码,但在处理实际问题时它们的实质是一样的,所以不要看轻每一种语言,只是它们擅长的领域不同罢了!~

入队

图片

出队

图片

获取队头元素

图片

获取队列长度

图片

四、搞定杨辉三角

1、首先,需要初始化一个队列;

2、将第一行的元素1入队,接着操作第二行;

3、从第三行开始,现在的对头指向N-1行,将每行的固定元素1入队,然后循环操作求和:

        将队首元素出队,并保存它的值valueDeque;

获取当前队首的元素valueFront,将(valueDeque+valueFront)入队;

4、循环结束后,队首在N-1行的最后一个元素处,现将其出队,然后将每行最后的固定元素1入队;

5、循环3、4步就可以输出杨辉三角形了。

图片

显示部分没什么技术含量,这里不再贴出,大家自行解决~

学习和交流QQ群:470085939,或添加私人微信(corax_8088)****,****我们一起scratch!

你可能感兴趣的:(用队列轻松搞定杨辉三角)