JavaScript實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列
一、優(yōu)先級(jí)隊(duì)列介紹
我們知道,普通的隊(duì)列插入一個(gè)元素,數(shù)據(jù)會(huì)被放在后端,并且需要前面所有的元素都處理完成后才會(huì)處理前面的數(shù)據(jù)。但是優(yōu)先級(jí)隊(duì)列,在插入一個(gè)元素的時(shí)候會(huì)考慮該數(shù)據(jù)的優(yōu)先級(jí),和其他數(shù)據(jù)的優(yōu)先級(jí)進(jìn)行比較。比較完成后,可以得出這個(gè)元素在隊(duì)列中的正確位置,其他的處理方式,和基本隊(duì)列的處理方式基本一樣。
優(yōu)先級(jí)隊(duì)列主要考慮的問(wèn)題:
- 每個(gè)元素不再只是一個(gè)數(shù)據(jù),而且包含數(shù)據(jù)的優(yōu)先級(jí);
- 在添加方式中,根據(jù)優(yōu)先級(jí)放入正確的位置。
在日常中也有用到優(yōu)先級(jí)隊(duì)列的例子,比如說(shuō)醫(yī)院的(急診科)候診室。醫(yī)生會(huì)優(yōu)先處理病情比較嚴(yán)重的患者。計(jì)算機(jī)中,我們也可以通過(guò)優(yōu)先級(jí)隊(duì)列來(lái)重新排列隊(duì)列中任務(wù)的順序.比如每個(gè)線(xiàn)程處理的任務(wù)重要性不同,我們可以通過(guò)優(yōu)先級(jí)的大小,來(lái)決定該線(xiàn)程在隊(duì)列中被處理的次序。
二、優(yōu)先級(jí)隊(duì)列封裝
優(yōu)先級(jí)隊(duì)列的操作和隊(duì)列的操作方法基本相同,但是插入操作有所不同,所以,我們這里主要是來(lái)實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列的插入操作。
比如說(shuō)我們現(xiàn)在要根據(jù)某個(gè)數(shù)據(jù)的優(yōu)先級(jí)來(lái)插入元素,這里我們先創(chuàng)建一個(gè)類(lèi)來(lái)封裝優(yōu)先級(jí)隊(duì)列,并在其內(nèi)部創(chuàng)建一個(gè)構(gòu)造函數(shù)來(lái)保存元素的優(yōu)先級(jí)和數(shù)據(jù),再添加一個(gè)屬性用于存放元素。
代碼如下:
function PtiorityQueue(){ var items = []; //封裝一個(gè)新的構(gòu)造函數(shù),用于保存元素和元素的優(yōu)先級(jí) function queueElement(element,priority){ this.element = element; this.priority = priority; } }
創(chuàng)建完成后,在來(lái)實(shí)現(xiàn)其的插入操作:
- 如果隊(duì)列內(nèi)部沒(méi)有元素,則直接插入
- 如果要插入的元素的優(yōu)先級(jí)小于隊(duì)列內(nèi)部元素的優(yōu)先級(jí),則排序后插入。
具體實(shí)現(xiàn)代碼如下:
function PtiorityQueue(){ this.items = []; //封裝一個(gè)新的構(gòu)造函數(shù),用于保存元素和元素的優(yōu)先級(jí) function QueueElement(element,priority){ this.element = element; this.priority = priority; } //1.實(shí)現(xiàn)插入方法 PtiorityQueue.prototype.enqueue = function(element,priority){ //1.創(chuàng)建queueElement對(duì)象 var queueElement = new QueueElement(element,priority); //2.判斷隊(duì)列是否為空 if(this.items.length == 0){ this.items.push(queueElement); }else{ var flag = false; for(var i =0;i<this.items.length;i++){ if(queueElement.priority < this.items[i].priority){ this.items.splice(i,0,queueElement); flag = true; break; } } if(!flag){ this.items.push(queueElement) } } } }
輸入測(cè)試數(shù)據(jù)為:
var pq = new PtiorityQueue();
pq.enqueue('d',30)
pq.enqueue('c',50)
pq.enqueue('a',100)
pq.enqueue('b',60)
pq.enqueue('e',20)
console.log(pq);
打印結(jié)果為:
到此這篇關(guān)于JavaScript實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列的文章就介紹到這了,更多相關(guān)優(yōu)先級(jí)隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript?定時(shí)器關(guān)鍵點(diǎn)及使用場(chǎng)景解析
這篇文章主要為大家介紹了JavaScript?定時(shí)器關(guān)鍵點(diǎn)及使用場(chǎng)景解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01js 實(shí)現(xiàn)驗(yàn)證碼輸入框示例詳解
這篇文章主要為大家介紹了js 實(shí)現(xiàn)驗(yàn)證碼輸入框示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09JS前端實(shí)現(xiàn)fsm有限狀態(tài)機(jī)實(shí)例詳解
這篇文章主要為大家介紹了JS前端實(shí)現(xiàn)fsm有限狀態(tài)機(jī)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09JavaScript單例模式能不能去實(shí)例只留單原理解析
這篇文章主要為大家介紹了JavaScript單例模式能不能去實(shí)例只留單原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12微信小程序-getUserInfo回調(diào)的實(shí)例詳解
這篇文章主要介紹了微信小程序-getUserInfo回調(diào)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10