大数据

javascript桥接模式(1)-队列数据结构

根据书上例子的实际要求,涉及到js队列的问题。所以先把js中队列的具体实现数据结构贴出来。具体参考《学习javascript数据结构和算法》第四章。
队列数据结构遵循先入先出的原则。入队操作添加到数组的末尾,返回新数组。出队操作弹出数组第一个元素,返回新数组。两个操作对于数组都有结构的改变

 //js中队列的实现是依赖数组的数据结构
function Queue() {

    let items = [];  //初始化空数组,let关键字是es6中的
    //用于形成大括号包围的作用域

    this.enqueue = function(element){ //入队操作
        items.push(element); //数组push操作
    };

    this.dequeue = function(){//出对
        return items.shift(); //数组shift操作
    };

    this.front = function(){ //队列第一个元素
        return items[0];     //数组第一个元素
    };

    this.isEmpty = function(){ //判断队列有无成员
        return items.length == 0; //布尔值判断
    };

    this.clear = function(){ //清空队列
        items = [];   //变量重新赋值空数组
    };

    this.size = function(){ //获得队列的长度
        return items.length; 
    };

    this.print = function(){ //打印队列
        console.log(items.toString());
    };
}

下面是优先队列。数据成员入队的时候要携带数据和优先级。
优先级在这里的定义是数字越大在数组中的位置靠后。当插入一个数组元素的时候,先要根据它的优先级来判断,最小是直接插入到第一位,紧邻一个比他大的优先级是,就插入到这个邻居的前面。如果是最大的数字就插到数组的最后。
一维数组变成了二位数组。

function PriorityQueue() {

    let items = [];

    function QueueElement (element, priority){ 
            this.element = element;//成员本身
        this.priority = priority;  //优先级
    }

    this.enqueue = function(element, priority){
        let queueElement = new QueueElement(element, priority);

        let added = false; //添加标记
        for (let i=0; i
//打印出的结果
Jack  - 1  //数组元素--优先级
Camila  - 1
John  - 2
Maxwell  - 2
Ana  - 3

在这个队列的基础上可以实现javascript中桥接模式的例子。本文算是一个独立的javascript队列的介绍,也作为桥接模式例子的背景方法。
javascript设计模式 第八章-桥接模式