生活随笔
收集整理的這篇文章主要介紹了
JS 实现队列
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
通過(guò)JS實(shí)現(xiàn)隊(duì)列的數(shù)據(jù)結(jié)構(gòu),首先是最普通的隊(duì)列,先入先出
function createQueue() {let queue
= []const enQueue = (data) => {if(data
== null) returnqueue
.push(data
)}const deQueue = () => {if(queue
.length
=== 0) return const data
= queue
.shift()return data
}const getQueue = () => {return Array
.from(queue
)}return {enQueue
,deQueue
,getQueue
}
}
還有就是循環(huán)隊(duì)列
function cirQueue (n) {if(!n
) return console
.error('創(chuàng)建失敗,請(qǐng)按照cirQueue(n: number)格式傳入')let tial
= 0let head
= 0let queue
= []function enQueue(data) {try {if((tial
+ 1) % n
=== head
) return console
.error('隊(duì)列已滿')tial
= (tial
+ 1) % nqueue
.push(data
)} catch(error
) {console
.log('error----', error
)}}function deQueue() {try {if(head
=== tial
) return console
.log('隊(duì)列為空')head
= (head
+ 1) % n
let item
= queue
.shift()return item
} catch(error
) {console
.log('error------', error
)}}function getQueue() {try {return Array
.from(queue
)} catch(error
) {console
.log('error-----', error
)}}function getQueueHeadAndTial() {return {tial
,head
}}return {enQueue
,deQueue
,getQueue
,getQueueHeadAndTial
}
}
正常隊(duì)列可能存在存滿的情況,因此需要一定容錯(cuò)機(jī)制,當(dāng)隊(duì)列滿了,可以先把任務(wù)存儲(chǔ)下來(lái)
function cirBlockQueue (n) {if(!n
) return console
.error('創(chuàng)建失敗,請(qǐng)按照cirQueue(n: number)格式傳入')let tial
= 0let head
= 0let queue
= []let waitQueue
= cirQueue(n
)function enQueue(data) {try {if((tial
+ 1) % n
=== head
) {const { head: waitQueueHead
, tial: waitQueueTial
} = waitQueue
.getQueueHeadAndTial()if((waitQueueTial
+ 1) % n
!== waitQueueHead
) {waitQueue
.enQueue(data
)return } else {return console
.error('隊(duì)列已滿')}}tial
= (tial
+ 1) % nqueue
.push(data
)} catch(error
) {console
.log('error----', error
)}}function deQueue() {try {if(head
=== tial
) return console
.log('隊(duì)列為空')head
= (head
+ 1) % n
let item
= queue
.shift()const { head: waitQueueHead
, tial: waitQueueTial
} = waitQueue
.getQueueHeadAndTial()if(waitQueueHead
!== waitQueueTial
) {enQueue(waitQueue
.deQueue())}return item
} catch(error
) {console
.log('error------', error
)}}function getQueue() {try {return Array
.from(queue
)} catch(error
) {console
.log('error-----', error
)}}return {enQueue
,deQueue
,getQueue
,tial
,head
}
}
總結(jié)
以上是生活随笔為你收集整理的JS 实现队列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。