第三頁 隊列學習
阿新 • • 發佈:2018-07-19
dequeue emp ron turn out 學習 console for 新的
隊列是遵循FIFO(First In First Out,先進先出,也稱為先來先服務)原則的一組有序的項 隊列在尾部添加新元素,並從頂部移除元素。最新添加的元素必須排在隊列的末尾。
? enqueue(element(s)):向隊列尾部添加一個(或多個)新的項。
? dequeue():移除隊列的第一(即排在隊列最前面的)項,並返回被移除的元素。
? front():返回隊列中第一個元素——最先被添加,也將是最先被移除的元素。隊列不
做任何變動(不移除元素,只返回元素信息——與Stack類的peek方法非常類似)。
? isEmpty():如果隊列中不包含任何元素,返回true,否則返回false。
? size():返回隊列包含的元素個數,與數組的length屬性類似。
//創建一個自己的隊列 function MyQueen() { //這裏是屬性和方法 var items = []; this.enqueue = function (element) { items.push(element); }; this.dequeue = function () { return items.shift(); };this.front = function () { return items[0]; }; this.isEmpty = function () { return items.length == 0; }; this.clear = function () { items = []; }; this.size = function () {return items.length; }; this.print = function () { console.log(items.toString()); }; } var queue = new MyQueen(); console.log(queue.isEmpty()); //輸出true //向隊列添加 queue.enqueue("John"); queue.enqueue("Jack"); queue.enqueue("Camila"); queue.print();//隊列數組轉換字符串 console.log(queue.size()); //輸出3 console.log(queue.isEmpty()); //輸出false queue.dequeue();//移除第一個進來的 然後下面輸出Jack,Camila queue.print();
優先隊列:元素的添加和移除是基於優先級的。一個現實的例子就是機場登機的順序。頭等艙和商務艙乘客的優先級要高於經濟艙乘客。在有些國家,老年人和孕婦(或帶小孩的婦女)登機時也享有高於其他乘客的優先級。
//優先隊列 function PriorityQueue() { var items = []; this.isEmpty = function () { return items.length == 0; }; //{1}: 要向PriorityQueue添加元素,需要創建一個特殊的元素這個元素包含了要添加到隊列的元素(它可以是任意類型及其在隊列中的優先級。 function QueueElement(element, priority) { //{1} 創建新元素 this.element = element; this.priority = priority;//表示優先級 } this.enqueue = function (element, priority) {//入隊列 var queueElement = new QueueElement(element, priority); if (this.isEmpty()) {// {2} 如果隊列為空 添加元素 items.push(queueElement); } else {//否則,就需要比較該元素與其他元素的優先級。 var added = false;//添加標識 for (var i = 0; i < items.length; i++) {//遍歷這個隊列數組的所有元素, if (queueElement.priority < items[i].priority) { items.splice(i, 0, queueElement); // {3} 一旦找到priority值更大的元素,就插入新元素 //數組的splice()的方法 在i索引位置開始,刪除後面0個元素,插入元素 added = true; break; // {4} 終止for循環 } } if (!added) { //{5} 如果要添加元素的priority值大於任何已有的元素,把它添加到隊列的末尾就行了 items.push(queueElement); } } this.print = function () { var str = ‘‘; if (!this.isEmpty()) { //for (var i = 0; i < items.length; i++) { // str += items[i].element + "_" + items[i].priority+"--"; //} str += items[0].element + "_" + items[0].priority ; } console.log(str); }; }; //其他方法和默認的Queue實現相同 } var priorityQueue = new PriorityQueue(); priorityQueue.enqueue("John", 2); //[John,2] priorityQueue.enqueue("Jack", 1);// [Jack,1],[John,2] priorityQueue.enqueue("Camila", 1);// [Jack,1],[Camila,1],[John,2] priorityQueue.print();// 輸出 Jack_1
第三頁 隊列學習