1. 程式人生 > 其它 >JS資料結構---佇列操作經典面試題 擊鼓傳花方法實現

JS資料結構---佇列操作經典面試題 擊鼓傳花方法實現

技術標籤:資料結構佇列資料結構queuejsjavascript

佇列操作面試題中最為經典的則是擊鼓傳花問題


思路分析:

將五個人依次放入佇列內 設定每次數三人 將其從佇列中刪除
第三個人之前的人 先從佇列中刪除 然後在重新新增到佇列中
迴圈 直到佇列中只剩一個人


程式碼實現:

function PassGame(nameList,num){
//1-建立一個佇列結構
var queue=new Queue()

//2-將隊員名字壓入佇列中

for(var i=0;i<nameList.length;i++){
    queue.enqueue(nameList[i])
}
//3-開始進行遊戲 數數字
while(queue.size()>1){ for (var i=0;i<num-1;i++){ //將數字之前 沒被抓到的人 先從佇列刪除 在新增到佇列 queue.enqueue(queue.dequeue()) } //將 數字為 num 的人 從佇列中 刪除 queue.dequeue() } //4 獲取最後一個人 var lastOne=queue.front() console.log('最後剩下的人是:'+lastOne) console.log(queue) console.log(queue.size()) console.log(nameList.indexOf
(lastOne)) return nameList.indexOf(lastOne) } names=['lilei','lihua','xiaohong','xiaowei','xiaokai'] PassGame(names,3) function Queue() { this.items=[] //1.將元素壓入佇列中操作 Queue.prototype.enqueue = function (element) { this.items.push(element) } //2.將最先進來的元素從佇列中刪除 跟pop相反 Queue.
prototype.dequeue = function () { return this.items.shift() } //3.檢視佇列中最前面的元素 Queue.prototype.front = function () { return this.items[0] } //4.判斷佇列是否為空 Queue.prototype.isEmpty = function () { return this.items.length == 0 } //5.判斷佇列的長度 Queue.prototype.size = function () { return this.items.length } //6.toString型別 Queue.prototype.toString = function () { var result = '' for (var i = 0; i < this.items.length; i++) { result += this.items[i] } return result } }

在這裡插入圖片描述