js資料結構 佇列

2021-10-01 15:33:28 字數 2060 閱讀 8789

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。

佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元素稱為出隊。因為佇列只允許在一端插入,在另一端刪除,所以只有最早進入佇列的元素才能最先從佇列中刪除,故佇列又稱為先進先出(fifo—first in first out)線性表。

在我們生活中有很多像佇列的例子,比如說排隊等等。

使用js封裝佇列

function

queue()

;//移除佇列中的第一項

queue.prototype.

dequeue

=function()

;//返回佇列前端的元素

queue.prototype.

front

=function()

;//判斷佇列是否為空

queue.prototype.

isempty

=function()

;//返回佇列中的元素個數

queue.prototype.

size

=function()

;//將佇列中的內容轉換成字串形式

queue.prototype.

tostring

=function()

return resultstring;}}

let queue =

newqueue()

; queue.

enqueue

('abc');

queue.

enqueue

('nba');

queue.

enqueue

('cd');

console.

log(queue)

;<

/script>

封裝佇列與封裝棧的不同方法在於移除首項和返回首項,因為棧是先進後出,而佇列是先進先出,在棧中移除的是棧頂元素,也就是最後進入棧的一項,而在佇列中移除是移除第一項,返回第一項。

使用佇列解決約瑟夫環問題

約瑟夫斯環的規則是:有n個人,圍在一起,規定乙個具體的數字num,從1開始數數,數到num的人被淘汰,再從下乙個繼續從1開始數,數到num的人淘汰,以此迴圈,直到只剩下最後乙個人時,遊戲結束;

那麼用佇列如何解決這個問題呢?

現在有張,李,王,羅,陳五個人,首先規定乙個數字3,數到3的人淘汰,從張開始數,不等於3的人就放到佇列的後面,『王』數到了3將其刪除,下面從『羅』開始繼續從1開始數,以此迴圈,我們不難發現它的規律,只要將不等於num的數字從佇列刪除再放入佇列尾部,等於num就直接從佇列裡面刪除。

**實現:

function

passgame

(namelist,num)

while

(queue.

size()

>1)

數到num時的人,從佇列裡面刪除

queue.

dequeue()

;}//取出最後乙個人

let endname = queue.

front()

;alert

("最終剩下的人:"

+ endname)

;return namelist.

indexof

(endname);}

names =

['張'

,'李'

,'王'

,'羅'

,'陳'];

console.

log(

passgame

(names,3)

);

js資料結構 佇列 queue

github 佇列遵循先進先出的原則的一種有序的項。enqueue 向佇列尾部新增乙個 或多個 新的項 dequeue 移除佇列的第一 即排在佇列最前面的 項,並返回被移除的元素 front 返回佇列中第乙個元素 最先被新增,也將是最先被移除的元素。佇列不做任何變動 不移除元素,只返回元素資訊 與s...

JS 資料結構,佇列(Queue)

佇列 queue 它是一種 受限的線性表,先進先出 fifo 受限之處在於,它只能在表的 前端 進行 刪除 操作,在表的 後端 進行 插入 操作。列印佇列 有五份文件需要列印,這些文件會按照次序放入到列印佇列中,列印會依次從佇列中取出文件,優先放入的文件,優先被取出,並且對該文件進行列印,以此類推,...

JS資料結構學習 佇列

佇列是遵循先進先出原則的一組有序的項,與棧的不同的是,棧不管是入棧還是出棧操作都是在棧頂操作,佇列則是在隊尾新增元素,隊頂移除,用乙個圖來表示大概是這樣事的 用乙個更形象的例子就是 排隊服務,總是先排隊的人會先接受服務,當然不考慮插隊的情況 與棧的建立類似,首先建立乙個表示佇列的函式,然後定義乙個陣...