分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

js实现队列结构

发布时间:2023-09-06 02:31责任编辑:林大明关键词:js

创建队列

let itemsfunction 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实现队列结构

原文地址:https://www.cnblogs.com/pluslius/p/10331661.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved