队列--数据结构与算法JavaScript描述(5)

队列 Queue

概念

队列是一种列表,但队列只能在队尾插入元,在队首删除元素。

队列是一种先进先出的数据结构,用于存储按顺序排列的数据,被用在很多地方,比如提交操作系统执行的一系列进程、打印任务池等,一些仿真系统用队列来模拟银行或杂货店里排队的顾客。

可以将队列想像成在银行前排队的人群,排在最前面的人第一个办理业务,新来的人只能在后面排队,直到轮到他们为止。

对队列的操作

  • 向队列中插入新元素(入队):push( )
  • 删除队列中的元素(出队):pop( )
  • 读取队头的元素: peek( )

用数组实现队列

function Queue() {
    this.dataStore = [];
    this.enqueue = function(element){
        this.dataStore.push(element);
    }
    this.dequeue = function(){
        return this.dataStore.shift();
    }
    this.front = function(){
        return this.dataStore[0];
    }
    this.back = function(){
        return this.dataStore[this.dataStore.length - 1];
    }
    this.empty = function(){
        return this.dataStore.length === 0 ? true : false;
    }
    this.toString = function() {
        var str = '';
        for(var i = 0; i < this.dataStore.length; i ++){
            str += this.dataStore[i] + '\n';
        }
        return str;
    }

使用队列

队列不仅用于执行现实生活中与排队有关的操作,还可以用于对数据进行排序。

思路:对于0~99的数字,技术排序将数据扫描两次,第一次按个位上的数字进行排序,第二次按十位上的数字进行排序。每个数字根据对应位上的数值被分在不同的盒子里(从0~9共10个盒子,用10个队列来表示)

优先队列

在一般情况下,从队列中删除的元素,一定是率先入队的元素。但是也有一些使用队列的应用,在删除元素时不必遵守先进先出的约定。这种应用,需要使用一个叫做优先队列的数据结构来进行模拟。

从优先队列中删除元素是,需要考虑优先权的限制。比如医院急诊科的候诊室,当病人进入候诊室时,分诊护士会评估患者病情的严重程度,然后给一个优先级代码,高优先级的患者先于低优先级的患者就医,同样优先级的患者按照先来先服务的顺序就医。

出队函数变化如下:

function dequeue() {
    var entry = '';
    for(var i = 0; i < this.dataStore.length; i ++){
        if(this.dataStore[i].code < this.dataStore[entry].code){
           entry = i;
        }
    }
    return this.dataStore.slice(i,1);
}

双向队列

Deque类:双向队列是一个和队列类似的数据结构,允许从队列两端添加和删除元素。

posted @ 2018-06-15 16:52  Clover.Han  阅读(163)  评论(0编辑  收藏  举报