百度百科解釋:隊列是一種特殊的線性表,特殊之處在於它只容許在表的前端(front)進行刪除操做,而在表的後端(rear)進行插入操做,和棧同樣,隊列是一種操做受限制的線性表。進行插入操做的端稱爲隊尾,進行刪除操做的端稱爲隊頭。javascript
隊列也是一種列表,隊列用於存儲按順序排列的數據,先進先出(First-In-First-Out, FIFO),能夠想象成銀行前排隊的人羣。前端
javascript中的數組具備其它編程語言中沒有的優勢,數組的push()能夠在數組的末尾加入元素,shift()能夠刪除數組的第一個 元素。java
function Queue () {
this.dataStore = []
}
Queue.prototype = {
constructor: Queue,
// 向對位添加一個元素
enqueue: function (element) {
this.dataStore.push(element)
},
// 刪除隊首元素
dequeue: function () {
return this.dataStore.shift()
},
// 讀取隊首元素
front: function () {
return this.dataStore[0]
},
// 讀取隊尾元素
back: function () {
return this.dataStore[this.dataStore.length - 1]
},
// 顯示隊列內的全部元素
toString: function () {
var retStr = ''
for (var i = 0; i < this.dataStore.length; i++) {
retStr += this.dataStore[i] + '\n'
}
return retStr
},
// 判斷隊列是否爲空
empty: function () {
if (this.dataStore.length === 0) {
return true
} else {
return false
}
}
}
複製代碼
計算機剛出現時,程序是經過穿孔卡輸入主機的,每張卡包含一條程序語句。這些穿孔卡裝在一個盒子裏,通過一個機械裝置進行排序。咱們可使用一組隊列來模擬這一過程,這種排序技術叫作基數排序,它不是最快的排序算法,可是它展現了一些有趣的隊列使用方法。git
具體方法實現: 對0-99的數字,基數排序將數據集掃描兩次。第一次按個位上的數字進行排序,第二次按十位上的數字進行排序,每一個數字根據對應位上的數值被分在不一樣的盒子裏。算法
假設有以下數字:91, 46, 85, 15, 92, 35, 31, 22編程
// 第一次按個位上掃描排序
box0:
box1: 91, 31
box2: 92, 22
box3:
box4:
box5: 85, 15, 35
box6: 46
box7:
box8:
box9
複製代碼
排序後結果爲:91, 31, 92, 22, 85, 15, 35, 46後端
box0:
box1: 15
box2: 22
box3: 31, 35
box4: 46
box5:
box6:
box7:
box8: 85
box9: 91, 92
複製代碼
排序後結果爲:15, 22, 31, 35, 46, 85, 91, 92數組
// 能夠想象成上體育課時老師組隊時,其實也是一種算法dom
使用隊列表明盒子,能夠實現這種算法。咱們須要9個隊列,每一個對應一個數字,將全部隊列保存在一個數組中,使用取餘和除法操做決定個位和十位,根據算法的剩餘部分將數字加入相應的隊列。編程語言
// 根據相應位(個位,十位)上的數值,將數字分配到相應隊列
function distribute (nums, queues, n, digit) {
for (var i = 0; i < n; i++) {
if (digit === 1) {
queues[nums[i] % 10].enqueue(nums[i])
} else {
queues[Math.floor(nums[i] / 10)].enqueue(nums[i])
}
}
}
// 從隊列中收集數字
function collect (queues, nums) {
var i = 0
for (var digit = 0; digit < 10; digit++) {
while (!queues[digit].empty()) {
nums[i++] = queues[digit].dequeue()
}
}
}
// 主程序
var queues = []
for (var i = 0; i < 10; i++) {
queues[i] = new Queue()
}
var nums = []
for (var j = 0; j < 10; j++) {
nums[j] = Math.floor(Math.floor(Math.random() * 101))
}
console.log('before')
console.log(nums)
distribute(nums, queues, 10, 1)
collect(queues, nums)
distribute(nums, queues, 10, 10)
collect(queues, nums)
console.log('after')
console.log(nums)
複製代碼