javascript的队列,优先队列,循环队列

按书上的来弄的。慢慢理解了。

function Queue() {
    var items = [];
    this.enqueue = function(element){
        items.push(element);
    }

    this.dequeue = function(){
        return items.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() {
    var items = [];

    function QueueElement(element, priority){
        this.element = element;
        this.priority = priority;
    }
    this.enqueue = function(element, priority){
        var queueElement = new QueueElement(element, priority);
        if (this.isEmpty()){
            items.push(queueElement);
        } else {
            var added = false;
            for (var i=0; i<items.length; i++){
                if (queueElement.priority < items[i].priority){
                    items.splice(i, 0, queueElement);
                    added = true;
                    break;
                }
            }
            if (!added){
                items.push(queueElement);
            }
        }
    }

    this.dequeue = function(){
        return items.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);
    }
}

var priorityQueue = new PriorityQueue();
priorityQueue.enqueue("John", 2);
priorityQueue.enqueue("Jack", 1);
priorityQueue.enqueue("Camila", 1);
priorityQueue.print();

function hotPotato(nameList, num){
    var queue = new Queue();

    for (var i=0; i<nameList.length; i++){
        queue.enqueue(nameList[i]);
    }

    var eliminated = '';
    while (queue.size() > 1){
        for (var i=0; i<num; i++){
            queue.enqueue(queue.dequeue());
        }
        eliminated = queue.dequeue();
        console.log(eliminated + '在击鼓传花中被淘汰.');
    }
    return queue.dequeue();
}

var names = ['John','Jack','Camila','Ingrid','Carl'];
var winner = hotPotato(names, 7);
console.log('胜利者:' + winner);

时间: 2024-08-04 01:42:58

javascript的队列,优先队列,循环队列的相关文章

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-1后的示意图: 上图中,a0是当前 队头数据元素,an-1是当前 队尾数据元素. 为了

数据结构的C++实现之队列的顺序存储结构(循环队列)

队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.是一种先进先出的线性表(FIFO). 允许插入的一端称为队尾,允许删除的一端称为队头.我们在<栈的顺序存储结构>中发现,栈操作的top指针在Push时增 大而在Pop时减小,栈空间是可以重复利用的,而队列的front.rear指针都在一直增大,虽然前面的元素已经出队了,但它 所占的存储空间却不能重复利用.但大多数程序并不是这样使用队列的,一般情况下出队的元素就不再有保存价值了,这些 元素的存储空间应该回收利用,由此想

循环队列(顺序队列)

一 队列的定义 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表    (1)允许删除的一端称为队头(Front). (2)允许插入的一端称为队尾(Rear). (3)当队列中没有元素时称为空队列. (4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表. 二 顺序队列 队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表. 基本操作: 入队时:将新元素插入rear所指的位置,然后将rear加1. 出队时:删去fron

JavaScript队列、优先队列与循环队列_javascript技巧

队列是一种遵从先进先出(FIFO)原则的有序集合 队列在尾部添加新元素,从顶部移除元素 队列的理解 队列在我们生活中最常见的场景就是排队了 队列这个名字也已经很通俗易懂了 和栈很像,这不过队列是先入先出的数据结构 队列的前面是队头 队列的后面是队尾 出队从队头出 入队从队尾入 队列的创建 和栈类似,这里我就不就不啰嗦了 同样需要实现一些功能 这里我类比生活中的排队上厕所 向队列中添加元素(进入排队的队伍中) 移除队头元素(队伍最前面的人出队进入厕所) 查看队头元素(查看队伍最前面的人) 判断队列

javascript中利用数组实现的循环队列代码_javascript技巧

//循环队列 function CircleQueue(size){ this.initQueue(size); } CircleQueue.prototype = { //初始化队列 initQueue : function(size){ this.size = size; this.list = new Array(); this.capacity = size + 1; this.head = 0; this.tail = 0; }, //压入队列 enterQueue : functio

大话数据结构八:队列的顺序存储结构(循环队列)

1. 什么是队列? 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 2. 队列的特点: 队列是一种先进先出(First In First out)的线性表,允许插入的一端称为队尾,允许删除的一端称为队头. 3. 队列顺序存储有什么不足? 使用数组实现的顺序存储,当做出队列操作时,所有的元素都需要向前移动一位,性能很低. 4. 什么是循环队列? 队列头尾相接的顺序存储结构称为循环队列. 如图所示:front记住队头元素下标,rear记住队尾元素的下一个元素. 注意:

结构体-要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 区分头尾指针相等的情况

问题描述 要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 区分头尾指针相等的情况 我这个算法不知道为什么不能初始化,可能犯了很蠢的错误,求大神解答!!! /*循环队列_使用tag表示空或满_Solo*/ #include <stdio.h> #define MAXSIZE 50 #define FALSE 0 #define TRUE 1 typedef char CSQueueElemType; typedef struct { CSQueueElemType ele

c++求循环队列的元素个数

问题描述 c++求循环队列的元素个数 int getSize( )const {return (rear-front+maxsize)%maxsize;} 函数体返回的为什么不是rear-front?两者有啥区别吗? 解决方案 如果rear<front结果是rear-front+maxsize 如果rear>front结果是rear-front 为了用一个表达式同时表达两者,用(rear-front+maxsize)%maxsize 假设maxsize=10 rear=1 front=9,那么

【数据结构之旅】循环队列

说明:     时间关系,这里只给出代码及注释,有空的时候再详细介绍一下代码的实现流程. 1.代码及注释     如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

局部变量-为什么这个循环队列程序出错

问题描述 为什么这个循环队列程序出错 #include<malloc.h> typedef struct Queue { int *pBase; int front; int rear; }QUEUE,*PQUEUE; void init(PQUEUE pQ);//初始化队列 bool en_queue(PQUEUE pQ,int val);//向队列里放入数据 void traverse(PQUEUE pQ);//遍历队列 bool full_queue(PQUEUE pQ);//判断队列是