数据驱动型的设计03之Queue队列
- 2019 年 10 月 7 日
- 笔记
本系列从数据结构相关的计算机知识出发,从数据的角度提出一些数据驱动的设计思维模式。
总体介绍数据结构与设计的关系,用数据结构的方式来思考设计,并通过几个案例介绍一些大的思路。
介绍数据结构中的链表结构,并探讨设计中可能的链表数据。
第03期
介绍数据结构中的队列结构,及在智能设计中的应用。

Queue
队列
队列是一种先进先出(FIFO:first in first out)的数据结构。它只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。这期比较简单,基于上期实现的LinkedList结构,来实现Queue,然后为Queue添加插入数据及删除数据的方法:
enqueue
dequeue
删除操作相当于移除LinkedList的head节点,因为Queue只允许在表的前端进行删除操作。那么,我们就拓展下上一期实现的LinkedList类的方法:
LinkedList.prototype.deleteHead=function() { if (!this.head) { return null; } const deletedHead = this.head; if (this.head.next) { this.head = this.head.next; } else { this.head = null; this.tail = null; } return deletedHead; }
拓展完LinkedList后,我们实现下enqueue和dequeue,代码如下:
class LinkedList(){...}; class Queue { constructor() { this.linkedList = new LinkedList(); } enqueue(value) { this.linkedList.append(value); } dequeue() { const removedHead = this.linkedList.deleteHead(); return removedHead ? removedHead.value : null; }}
下面从其他领域看先进先出的概念:
先进先出
FIFO:first in first out
物流控制有一个存货模式的概念,最常用的是先进先出模式。其实还包括后进先出、随机出库这2种。
物流控制先进先出意思是:生产日期靠前的货物陈列在前面,确保生产日期靠前的商品先销售。
优点:
确保所有商品在正常的保质期内销售,控制损耗。而对于没有保质期的商品,先进先出可以永远保持陈列商品的新鲜。
缺点:
特别对于存货进出量频繁的企业比较繁琐。而且当物价上涨时,会高估企业当期利润和库存存货价值;反之,会低估企业存货价值和当期利润。
回到我们设计领域,举一个人工智能+平面设计的案例:
通过一个按钮,机器按照某种逻辑(比如用户喜好的色彩、或跟文案最匹配的图片)更换图片素材,就是一个队列,可以用队列的数据结构来表示。

设计上,还有没有其他队列的例子?例如,建筑设计里的人流动线、游戏里的场景切换、UI界面的动效等等。
欢迎留言讨论~
待续。