JS資料結構學習 佇列

2021-09-12 17:18:55 字數 2746 閱讀 4443

佇列是遵循先進先出原則的一組有序的項,與棧的不同的是,棧不管是入棧還是出棧操作都是在棧頂操作,佇列則是在隊尾新增元素,隊頂移除,用乙個圖來表示大概是這樣事的:

用乙個更形象的例子就是:排隊服務,總是先排隊的人會先接受服務,當然不考慮插隊的情況

與棧的建立類似,首先建立乙個表示佇列的函式,然後定義乙個陣列用來儲存佇列裡的元素:

function queue()
建立佇列後需要為其定義一些方法,一般來說佇列包含以下方法:

具體實現:

function queue() 

// 遵循先進先出原則,從佇列的頭部移除元素

this.dequeue = function ()

// 返回佇列最前面的項

this.front = function ()

// 返回佇列是否為空

this.isempty = function ()

// 返回佇列的長度

this.size = function ()

// 列印佇列,方便觀察

this.print = function ()

}

接下來讓我們看看佇列的使用:

let queue = new queue()

queue.enqueue('a')

queue.enqueue('b')

queue.enqueue('c')

queue.dequeue()

queue.print()

首先向佇列中新增三個元素:a,b,c,然後移除佇列中的乙個元素,最後列印現有佇列,讓我們一起**這個過程:

和實現stack類一樣,也可以用es6的class語法實現queue類,用weakmap儲存私用屬性items,並用閉包返回queue類,來看具體實現:

let queue = (function () 

enqueue (element)

dequeue ()

front ()

isempty ()

size ()

print ()

} return queue

})()

let queue = new queue()

queue.enqueue('a')

queue.enqueue('b')

queue.enqueue('c')

queue.dequeue()

queue.print()

優先佇列顧名思義就是:佇列中的每個元素都會有各自的優先順序,在插入的時候會根據優先順序的高低順序進行插入操作,和前面佇列實現有點不太一樣的地方,佇列中的元素多了有先級的屬性,下面來看具體**:

function priorityqueue() 

this.enqueue = function (element, priority)

}if (!added)

} this.dequeue = function ()

this.front = function ()

this.isempty = function ()

this.size = function ()

this.print = function () -$`)}}}

let priorityqueue = new priorityqueue()

priorityqueue.enqueue('a', 3)

priorityqueue.enqueue('b', 2)

priorityqueue.enqueue('c', 1)

priorityqueue.dequeue()

priorityqueue.print()

入隊時如果隊列為空直接加入佇列,否則進行比較,priority小的優先順序高,優先順序越高放在佇列的越前面,下面用乙個圖來看呼叫過程:

迴圈佇列顧名思義就是:給定乙個數,然後迭代佇列,從佇列開頭移除一項,然後再將其加到佇列末尾,當迴圈到給定數字時跳出迴圈,從隊首移除一項,直至剩餘乙個元素,下面來看具體**:

unction queue() 

this.dequeue = function ()

this.front = function ()

this.isempty = function ()

this.size = function ()

this.print = function ()

}function loopqueue(list, num)

let out = queue.dequeue()

console.log('出佇列:' + out)

} return queue.dequeue()

}console.log('last:' + loopqueue(['a', 'b', 'c', 'd', 'e'], 3))

JS資料結構學習 佇列

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

JS資料結構學習 佇列

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

資料結構學習 佇列

定義 佇列 queue 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出的 first in first out 的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作!假設佇列是q a1,a2,an 那麼a1就是隊頭元素,而a...