数据驱动型的设计03之Queue队列

  • 2019 年 10 月 7 日
  • 笔记

本系列从数据结构相关的计算机知识出发,从数据的角度提出一些数据驱动的设计思维模式。

第01期

总体介绍数据结构与设计的关系,用数据结构的方式来思考设计,并通过几个案例介绍一些大的思路。

第02期

介绍数据结构中的链表结构,并探讨设计中可能的链表数据。

第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界面的动效等等。

欢迎留言讨论~

待续。