队列&优先队列

1、队列

普通的队列都是先进先出,元素从队尾添加,从队头删除。

  function queue(){
        var arr=[];
        this.enqueue=function(item){
            arr.push(item);
        };
        this.dequeue=function(){
            arr.shift();
        };
        this.queueSize=function(){
            return arr.length;
        };
        this.isEmpty=function(){
            return arr.length==0;
        };
        this.front=function(){
            return arr[0];
        };
        this.clear=function(){
            arr=[];
        };
        this.print=function(){
            console.log(arr.toString());
        }
    }
    var q=new queue();
    q.enqueue(‘1‘);
    q.enqueue(2);
    q.enqueue(3);
    q.dequeue()
    q.print();

2、优先级队列

优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出的特征。

任务编号 1 2 3 4 5
优先级编号 20 0 40 30 10
执行顺序 3 1 5 4 2

优先号越小,优先级越高。

优先队列主要有3个操作,查找,插入,删除。

分为两种最大优先队列和最小优先队列。

最大优先队列:先查找,找到优先级最大的元素将其删除。

最小优先队列:先查找,找到优先级最小的元素将其删除。

下面用JS写一个最大优先队列。入队列我们按照优先级从小到大排序,出队列仍然直接从队首出

  function priorityQueue(){
        var arr=[];
        this.enqueue=function(item,pri){  // 入队列要比较优先级大小。同等优先级的情况下,按照普通队列处理
            var flag=false;
            var temp={
                item:item,
                pri:pri
            }
            for(var i=0,len=arr.length;i<len;i++){
                if(arr[i].pri>temp.pri){
                    arr.splice(i,0,temp);
                    flag=true;
                    break;
                }
            }
            if(flag==false){
                arr.push(temp);
            }
        };
        this.dequeue=function(){
            arr.shift();
        };
        this.size=function(){
            return arr.length;
        };
        this.isEmpty=function(){
            return arr.length==0;
        };
        this.front=function(){
            return arr[0];
        };
        this.clear=function(){
            arr=[];
        };
        this.print=function(){
            for(var i=0;i<arr.length;i++){
                console.log(arr[i].item);
            }
        }
    }
    var q=new priorityQueue();
    q.enqueue(1,30);
    q.enqueue(2,20);
    q.enqueue(3,90);
    q.enqueue(4,0);
    q.enqueue(5,50);
    q.enqueue(7,30);
    q.enqueue(8,0);
    q.dequeue();
    q.print();
时间: 2024-10-25 21:08:22

队列&优先队列的相关文章

HDU 1242 &amp;&amp; ZOJ 1649( BFS (队列 || 优先队列)).

~~~~ 突然发现一篇搜索的题目都有写.昨天发现道bfs题目,HDU上AC, ZOJ上WA.不得不说HDU上的数据之水.. 今天早起刷题有了思路,并用队列和单调队列都写了一遍,0MS飘过~~ ~~~~ 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1242 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=649 ~~~~ 首先有坑的地方是friends,对嘛,朋友有很多,ang

【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

STL入门与简介 #include<iostream> #include <vector>//容器 #include<array>//数组 #include <algorithm>//算法 using namespace std; //实现一个类模板,专门实现打印的功能 template<class T> //类模板实现了方法 class myvectorprint { public: void operator ()(const T &

【STL】栈+队列+优先队列(详)+ 拯救行动题解

一.栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素. 说通俗一点,就是一种有口无肛门的数据结构 咳咳...是一种满足"后进先出"规则的数据结构.有PUSH和POP两种操作.PUSH:把元素压入栈顶 POP:把元

luogu 2827 蚯蚓 单调队列/优先队列

易知可利用优先队列选取最大值: 但是通过分析可知,先取出的蚯蚓分开后仍然要比后分的长,所以可直接利用单调队列找队头即可,分三个单调队列,分别找未切割,切割,切割2三种情况 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) #define ll long long using namespace std; const int inf=2147483647; const int N=1e5+5;

队列(优先队列 结构体)

TonyY 有幸进入银行实习, 作为一名柜台职员, 他的任务就是在正确的时间为正确的人服务.每个来银行的人, 都有一个 vip 值, TonyY 需要做到每服务完一个客户后,找出队列中 vip 值最高的人为他服务,之后被服务的人离开队列.在他为客户服务的过程中,随时都会有新的客户来排队.现在他想知道,每次叫号的时候,叫到的人会是谁.★数据输入输入第一行为一个正整数 N(0<N<=100000),表示操作数.接下来 N 行, 每行一个操作."PUT name num"表示有一

数据结构——队列(Queues)

队列的存储特性:FIFO(first in first out)即先进先出原则 单向/双向队列 *优先队列(与queue不同) 存储方式: 带尾指针的单向链表 / 数组 queue类: queue(); bool empty() const; T &front(); //最先入的 队首元素 const T &front() const; void pop(); //删除队首元素 void push(const T &item); //加在队列尾 int size() const;

第十章笔记&#183;优先级队列

需求与动机 什么是优先级队列 优先队列是计算机科学中的一类抽象数据类型.优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务:优先级相同的元素按照其在优先队列中的顺序得到服务.优先队列往往用堆来实现. --wikipedia 应用需求 在医院门诊,如果只有一个医生,多位病人.按照通常流程来说,采用先到先服务的顺序(FIFO).但是如果病人中有人患有心脏病,那么显然这个病人需要得到优先治疗. 在计算机系统中,绝大多数支持多任务,这种多任务调度也类似于医院门诊.CPU相当于医生,计算任

Num 22 : NYOJ : 0055 懒省事的小明 [ 优先队列 ]

生活中我们会遇到各种各样的队列的问题,在C语言中,也有几类关于队列的问题: 普通队列.链队列.循环队列.优先队列( 算法中应用最为广泛,常出现在BFS中 ); 今天就在这里总结一下有关优先队列的一些用法:     优先队列: 对于一般的队列,遵循的是简单地FIFO( first input first output )[ 先进先出 ]的原则: 这一点与栈的特性正好相反: 对于优先队列,特点不是先进先出,而是满足一定条件的元素先出队( 例如,每次都是最大的元素出队 ). 一.声明方法: 优先队列的

zookeeper 简介

一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下: 场景一 有这样一个场景:系统中有大约100w的用户,每个用户平 均有3个邮箱账号,每隔5分钟,每个邮箱账需要收取100封邮件,最多3亿份邮件需要下载到服务器中(不含附件和正文).用20台机器划分计算的压力,从 多个不同的网路出口进行访问外网,计算的压力得到缓解,那么每台机器的计算压力也不会很大了. 通过我们的讨论和以往的经验判断在这场景中可以实现并行计算,但我们还期望能对并行计算的节点进行动态的添加/删除,做到