zoukankan      html  css  js  c++  java
  • 操作 学习JavaScript数据结构与算法(第3版)阅读笔记---第5章

    5.1 队列数据结构

    队列是遵循先进先出(FIFO,也称为先来先服务)原则的一组有序的项。队列在尾部添加新 元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。
    在现实中,最常见的队列的例子就是排队。

    5.1.1 创建队列

    创建自己的类来表示一个队列。

    class Queue { 
        constructor() { 
            this.count = 0; // {1} 
            this.lowestCount = 0; // {2} 
            this.items = {}; // {3} 
        } 
    }
    

    使用一个对象来存储我们队列中的元素(行{3})。
    声明一个 count 属性来帮助我们控制队列的大小(行{1})。
    声明一个 lowestCount 变量(行{2})来帮助我们追踪第一个元素,方便从队 列前端移除元素。
    接下来需要声明一些队列可用的方法。
    enqueue(element(s)):向队列尾部添加一个(或多个)新的项。
    dequeue():移除队列的第一项(即排在队列最前面的项)并返回被移除的元素。
    peek():返回队列中第一个元素——最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息)。
    isEmpty():如果队列中不包含任何元素,返回 true,否则返回 false。
    size():返回队列包含的元素个数,与数组的 length 属性类似。

    1. 向队列添加元素

    实现enqueue 方法。该方法负责向队列添加新元素,是新的项只能添加到队列末尾。

    enqueue(element) { 
        this.items[this.count] = element; 
        this.count++; 
    }
    

    向队列中加入一个元素的话,我们要把 count 变量作为 items对象中的键,对应的元素作为它的值。将元素加入队列后,我们将 count 变量加 1。

    2. 从队列移除元素

    实现 dequeue 方法,该方法负责从队列移除项。由于队列遵循先进先出原则,最 先添加的项也是最先被移除的。

    dequeue() {
        if (this.isEmpty()) { 
            return undefined; 
        } 
        const result = this.items[this.lowestCount]; // {1} 
        delete this.items[this.lowestCount]; // {2} 
        this.lowestCount++; // {3} 
        return result; // {4}
    }
    

    首先检验队列是否为空。如果为空,返回 undefined 值。如果队列不为空, 暂存队列头部的值(行{1}),以便该元素被移除后(行{2})将它返回(行{4})。将 lowestCount 属性加 1(行{2}。
    用下面的内部值来模拟 dequeue 动作。

    items = { 
        0: 5, 
        1: 8 
    }; 
    count = 2; 
    lowestCount = 0;
    

    将键设为 0 来获取队列头部的元素(第一个被添加的元素是 5),删除它,再返回它的值。在这种场景下,删除第一个元素后,items 属性将只会包含一个元素(1∶8)。再次执 行 dequeue 方法的话,它将被移除。因此我们将 lowestCount 变量从 0 修改为 1。

  • 相关阅读:
    光场显微成像----整理
    清华大学自动化系友论坛——光电智能计算:笔记
    大创记录——Day3.12
    2.17UI bug修复
    beta阶段UI界面改进
    关于UI设计的心得体会-alpha和beta交界期间
    1.30进度
    2018.1.28进度更新
    心·迹 项目简介
    项目组成员介绍
  • 原文地址:https://www.cnblogs.com/donokamark/p/12690551.html
Copyright © 2011-2022 走看看