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();

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

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

    易知可利用优先队列选取最大值: 但是通过分析可知,先取出的蚯蚓分开后仍然要比后分的长,所以可直接利用单调队列找队头即可,分三个单调队列,分别找未切割,切割,切割2三种情况 #include<bi ...

  2. Java栈,队列,优先队列的使用

    1. 栈的使用: import java.util.*; public class Main{ public static void main(String[] args){ Deque<Str ...

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

    一.栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元 ...

  4. Windows消息队列(优先队列,结构体中放比较函数)

    Windows消息队列 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中.同时,如果队列不是空的 ...

  5. 【UVA】12100 Printer Queue(STL队列&优先队列)

    题目 题目     分析 练习STL     代码 #include <bits/stdc++.h> using namespace std; int main() { int t; sc ...

  6. STL 优先队列

    STL 栈,队列,优先队列用法 分类: Learning C++2013-11-15 00:52 843人阅读 评论(2) 收藏 举报 c++栈队列优先队列STL STL 中栈的使用方法(stack) ...

  7. 数据结构——队列(Queues)

    队列的存储特性:FIFO(first in first out)即先进先出原则 单向/双向队列 *优先队列(与queue不同) 存储方式: 带尾指针的单向链表 / 数组 queue类: queue() ...

  8. JavaScript数据结构与算法(三) 优先级队列的实现

    TypeScript方式实现源码 // Queue类和PriorityQueue类实现上的区别是,要向PriorityQueue添加元素,需要创建一个特殊的元素.这个元素包含了要添加到队列的元素(它可 ...

  9. 数据结构与算法——优先队列类的C++实现(二叉堆)

    优先队列简单介绍: 操作系统表明上看着是支持多个应用程序同一时候执行.其实是每一个时刻仅仅能有一个进程执行,操作系统会调度不同的进程去执行. 每一个进程都仅仅能执行一个固定的时间,当超过了该时间.操作 ...

随机推荐

  1. JS中document对象和window对象的区别

    简单来说,document是window的一个对象属性. Window 对象表示浏览器中打开的窗口. 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 win ...

  2. Fitnesse批量读取变量信息,并保存到用例执行上下文中

    Fitnesse变量可以分成两种,一种是自定义变量,另一种是用例执行过程中的临时变量. 在Finesse使用过程中,如果需要定义一些公共的变量,可以统一在一个文件中使用自定义变量的方法,将公共变量全部 ...

  3. reverse 的用法

    直接对数组或是数据结构使用 #include<bits/stdc++.h> using namespace std; ]={,,,,,};//申请6个元素,下标从0开始,最后一个下标是5 ...

  4. 小米网关api

    http://bbs.xiaomi.cn/t-13198850 https://github.com/snOOrz/homebridge-aqara/blob/master/README.md htt ...

  5. C# Socket流数据大小端读写封装

      网络数据是大端模式,而c#中的数据小端结构,那么在读写网络数据的时候需要进行转换.c#类库IPAddress已经封装了大小端的转换. 封装代码如下: using System.IO; using  ...

  6. OpenLayers图层

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...

  7. Linux常用命令4 帮助命令

    1.帮助命令:man 命令英文原意:manual 命令所在路径:/usr/bin/man    执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得命令或者配置文件的帮助信息 例如:m ...

  8. small标签

    <small> 标签将旁注 (side comments) 呈现为小型文本. 免责声明.注意事项.法律限制或版权声明的特征通常都是小型文本.小型文本有时也用于新闻来源.许可要求. 对于由 ...

  9. KDD2016,Accepted Papers

    RESEARCH TRACK PAPERS - ORAL Title & Authors NetCycle: Collective Evolution Inference in Heterog ...

  10. solr dataimport中遇到的问题

    1.windows的tomcat是没有catalina.out的,可以通过修改start.bat和catalina.bat的方式让日志输出到catalina.out 2.按照网上搜到的资料配置好sol ...