zoukankan      html  css  js  c++  java
  • 队列和双端队列

    队列数据是遵循先进先出(FIFO)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。

    class Queue {
        constructor(){
            this.count = 0
            this.lowestCount = 0
            this.items = {}
        }
    }
    Queue.prototype.enqueue = function(element){
        this.items[this.count] = element
        this.count++
    }
    Queue.prototype.dequeue = function(){
        if(this.isEmpty()){
            return undefined
        }
        const result = this.items[this.lowestCount]
        delete this.items[this.lowestCount]
        this.lowestCount++
        return result
    }
    Queue.prototype.peek = function(){
        if(this.isEmpty()){
            return undefined
        }
        return this.items[this.lowestCount]
    }
    Queue.prototype.isEmpty = function(){
        return this.lowestCount == this.count
    }
    Queue.prototype.size = function(){
        return this.count - this.lowestCount
    }
    Queue.prototype.clear = function(){
        this.items = {}
        this.count = 0
        this.lowestCount = 0
    }
    Queue.prototype.toString = function(){
        if(this.isEmpty()){
            return ''
        }
        let str = `${this.items[this.lowestCount]}`
        for(let i = this.lowestCount+1;i < this.count;i++){
            str = `${str},${this.items[i]}`
        }
        return str
    }
    

    双端队列:是一种允许同时从前端和后端添加和移除元素的特殊队列。

    class Deque {
        constructor(){
            this.count = 0
            this.lowestCount = 0
            this.items = {}
        }
    }
    Deque.prototype.addFront = function(element){
        if(this.isEmpty()){
            this.addBack(element)
        }else if(this.lowestCount > 0){
            this.lowestCount--
            this.items[this.lowestCount] = element
        }else{
            for(let i = this.count;i > 0;i--){
                this.items[i] = this.items[i-1]
            }
            this.count++
            this.lowestCount = 0
            this.items[0] = element
        }
    }
    

        

  • 相关阅读:
    游戏系统开发笔记(八)——场景对象管理
    dynomite:高可用多数据中心同步
    VBS错误代码释义
    VBScript 内置函数
    在oracle中,select语句查询字段中非纯数字值
    ASP里面令人震撼地自定义Debug类(VBScript)
    调试 ASP 程序脚本
    多文档界面的实现(DotNetBar的superTabControl)
    C#利用tabControl控件实现多窗体嵌入及关闭
    使用MDI窗体实现多窗口效果
  • 原文地址:https://www.cnblogs.com/zhenjianyu/p/13221760.html
Copyright © 2011-2022 走看看