创建队列

let items
function Queue {
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.size = function(){
return items.length
}
this.print = function(){
console.log(items.toString())
}
}

使用ES6改造


let Queue = (function(){
const items = new WeakMap() class Queue {
constructor(){
items.set(this,[])
}
enqueue(element){
let q = items.get(this)
q.push(element)
}
dequeue(){
let q = items.get(this)
let r = q.shift()
return r
}
} return Queue
})()

最小优先队列

function PriorityQueue(){
let items = [] function QueueElement(element,priority){
this.element = element
this.priority = priority
} let added = false;
this.enqueue = function(element,priority){
let queueElement = new QueueElement(element,priority) for(let 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.print = function(){
console.log(items)
}
}

双端队列

class Deque {
constructor(){
this.count = 0;
this.lowestCount = 0;
this.items = {}
}
addFront(element){
if(this.isEmpty()){
this.addBack(element)
} else if(this.lowestCount > 0){
this.lowestCount --
this.items[this.lowestCount] = element
} else {
for(let i = this.count; i > 0; i--){
this.items[i] = this.items[i -1]
}
this.count ++
this.items[0] = element
}
}
addBack(element){
this.items[this.count] = element
this.count ++
}
removeFront(){
if (this.isEmpty()) {
return undefined;
}
const result = this.items[this.lowestCount];
delete this.items[this.lowestCount];
this.lowestCount++;
return result;
} removeBack() {
if (this.isEmpty()) {
return undefined;
}
this.count--;
const result = this.items[this.count];
delete this.items[this.count];
return result;
} peekFront() {
if (this.isEmpty()) {
return undefined;
}
return this.items[this.lowestCount];
} peekBack() {
if (this.isEmpty()) {
return undefined;
}
return this.items[this.count - 1];
} isEmpty() {
return this.size() === 0;
} clear() {
this.items = {};
this.count = 0;
this.lowestCount = 0;
} size() {
return this.count - this.lowestCount;
} toString() {
if (this.isEmpty()) {
return '';
}
let objString = `${this.items[this.lowestCount]}`;
for (let i = this.lowestCount + 1; i < this.count; i++) {
objString = `${objString},${this.items[i]}`;
}
return objString;
}
}

循环队列

function hotPotato(nameList,num){
let queue = new Queue() for(let i = 0; i < nameList; i++){
queue.enqueue(nameList[i])
} let eliminated = ''; while(queue.size() > 1){
for(let i = 0; i < num; i++){
queue.enqueue(queue.dequeue)
}
eliminated = queue.dequeue()
console.log(eliminated + '在击鼓传花游戏中被淘汰')
} return queue.dequeue()
}

回文检查

function palindromeChecker(aString){
if(
aString === undefined ||
aString === null ||
(aString !== null && aString.length === 0)
){
return false
} const deque = new Deque()
const lowerString = aString.toLocaleLowerCase().split(' ').join('')
let firstChar;
let lastChar; for(let i = 0; i < lowerString.length; i++){
deque.addBack(lowerString.charAt(i))
} while(deque.size() > 1){
firstChar = deque.removeFront()
lastChar = deque.removeBack();
if(firstChar !== lastChar){
return false
}
} return true
}

js实现队列结构的更多相关文章

  1. (js描述的)数据结构[队列结构,优先级队列](3)

    (js描述的)数据结构[队列结构](3) 一.队列结构的特点: 1.基于数组来实现,的一种受限的线性结构. 2.只允许在表头进行删除操作,在表尾进行插入操作. 3.先进先出(FIFO) 二.队列的一些 ...

  2. JS数据结构与算法-队列结构

    队列结构 一.认识队列 受限的线性结构: 我们已经学习了一种受限的线性结构:栈结构. 并且已经知道这种受限的数据结构对于解决某些特定问题,会有特别的 效果. 下面,我们再来学习另外一个受限的数据结构: ...

  3. Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换

    Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换 { "@type":"java.lang.Runti ...

  4. 刚开始学python——数据结构——“自定义队列结构“

    自定义队列结构  (学习队列后,自己的码) 主要功能:用列表模拟队列结构,考虑了入队,出队,判断队列是否为空,是否已满以及改变队列大小等基本操作. 下面是封装的一个类,把代码保存在myQueue.py ...

  5. 文件上传以及JS链式结构

    文件上传: 文件上传使用FileUpload控件,使用控件的SaveAs方法,需要绝对路径. 获取文件的绝对路径:Server.MapPath(相对路径); 或许要上传文件的本身名字用.FileNam ...

  6. JS实现队列

    JS实现队列: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾 ...

  7. Java实现队列结构的详细代码

    一.什么是队列结构 一种线性结构,具有特殊的运算法则[只能在一端(队头)删除,在另一端(队尾)插入]. 分类: 顺序队列结构 链式队列结构 基本操作: 入队列 出队列 二.准备数据 static fi ...

  8. javascript基础入门之js中的结构分支与循环语句

    javascript基础入门之js中的结构分支与循环语句 程序的结构①顺序结构:自上而下:②选择(分支)结构:多条路径,根据不同的条件,只执行其中一个:③循环结构:重复某些代码④配合特定的语句实现选择 ...

  9. 数据结构与算法 --- js描述队列

    js描述队列 队列的特性是只能在队尾插入元素,在队首删除元素,先进先出: 队列被用在很多地方,比如提交操作系统执行的一系列进程,打印任务池,模拟现实中的排队: //队列类 function Queue ...

随机推荐

  1. [AIR] AS3操作文件时报SecurityError: fileWriteResource 错的解决方法

    在用File操作(移动,删除等)或者写入文件时,以下写法会报错 var file:File =File.applicationDirectory.resolvePath("1.swf&quo ...

  2. [Objective-C语言教程]结构体(17)

    Objective-C数组可定义包含多个相同类型的数据项的变量类型,但结构体是Objective-C编程中的另一个用户定义数据类型,它可组合不同类型的数据项. 结构体用于表示记录,假设要图书馆中跟踪书 ...

  3. mxonline实战10,课程列表页,课程详情页1

    对应github地址:第10天   一. 课程列表页   1. 拷贝course-list.html到templates目录中 2. 编写url和view 在courses/views.py中新加

  4. 使HTML页面上获取到的文本保留空格和换行符等格式

    <pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体.   <pre>的内容自动换行的问题(兼容多个浏览器): ...

  5. day 11课后作业

    # -*- coding: utf-8 -*-# @Time : 2019/1/3 20:03# @Author : Endless-cloud# @Site : # @File : day 11 课 ...

  6. P5038 [SCOI2012]奇怪的游戏

    题目链接 题意分析 首先我们需要求的是统一以后的值\(x\) 并且一般的棋盘操作我们都需要黑白染色 那么对于棋盘格子是偶数的情况的话 答案是存在单调性的 因为如果统一之后 两两搭配还是可以再加一个的 ...

  7. Visual Studio性能计数器,负载测试结果分析- Part III

    对于一个多用户的应用程序,性能是非常重要的.性能不仅是执行的速度,它包括负载和并发方面.Visual Studio是可以用于性能测试的工具之一.Visual Studio Test版或Visual S ...

  8. IDEA 笔记汇总

    Intellij IDEA 像eclipse那样给maven添加依赖 Intellij idea maven 引用无法搜索远程仓库的解决方案 Intellij IDEA 封装Jar包(提示错误: 找不 ...

  9. 深入理解map系列--HashMap(一)

    Map系列之HashMap(源码基于java8) HashMap是我们最常用的map实现之一,这篇文章将会介绍HashMap内部是如何工作的,以及内部的数据结构是怎样的 一.数据结构简图 二.源码解析 ...

  10. 【性能测试】:oracle数据库的监控方式

    一,[前提]:登陆操作系统后,需要切换到SQLPLUS的命令行模式:sqlplus / as sysdba 二,[监控步骤]:开始时执行一次:SQL>exec DBMS_WORKLOAD_REP ...