JS資料結構---佇列操作經典面試題 擊鼓傳花方法實現
阿新 • • 發佈:2021-02-19
技術標籤:資料結構佇列資料結構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
}
}