1. 程式人生 > 其它 >JavaScript資料結構之佇列結構(基於陣列實現)

JavaScript資料結構之佇列結構(基於陣列實現)

技術標籤:資料結構與演算法javascript佇列js資料結構

文章目錄


一、佇列是什麼?

佇列是是一種受限的線性表,特點為先進先出(FIFO:first in first out)。
受限之處在於它只允許在表的前端(front)進行刪除操作,在表的後端(rear)進行插入操作
例如:在食堂排隊的學生就是一個佇列,佇列的前端最優先打到菜,然後離開佇列,即在佇列前端刪除元素,學生也只能在佇列的末尾加入佇列進行排隊,即在佇列後端進行插入。

二、佇列常見的應用

列印佇列:計算機列印多個檔案的時候,需要排隊列印;

執行緒佇列:當開啟多執行緒時,當新開啟的執行緒所需的資源不足時就先放入執行緒佇列,等待CPU處理;

三、佇列的實現

佇列的實現和棧一樣,有兩種方案:

基於陣列實現;

基於連結串列實現;

本篇程式碼使用陣列實現。

三、佇列的常見操作

enqueue(element):向佇列尾部新增一個(或多個)新的項;
dequeue():移除佇列的第一(即排在佇列最前面的)項,並返回被移除的元素;
front():返回佇列中的第一個元素——最先被新增,也將是最先被移除的元素。佇列不做任何變動(不移除元素,只返回元素資訊與Stack類的peek方法非常類似);

isEmpty():如果佇列中不包含任何元素,返回true,否則返回false;
size():返回佇列包含的元素個數,與陣列的length屬性類似;
toString():將佇列中的內容,轉成字串形式;

四、使用步驟

1.建立佇列Queue類:

function Queue() {
            // 以陣列形式儲存佇列資料
            this.items = [];

            // 在Queue類新增方法,可以使多物件複用
            // 在佇列後端插入元素
            Queue.prototype.enqueue = function (
element) { this.items.push(element); } // 判斷是否為空 Queue.prototype.isEmpty = function () { return this.items.length == 0; } // 在佇列前端刪除元素 Queue.prototype.dequeue = function () { return this.items.shift(); } // 檢視佇列前端的元素 Queue.prototype.front = function () { return this.items[0]; } // 獲取佇列中元素個數 Queue.prototype.size = function () { return this.items.length; } // 以字串形式輸出元素 Queue.prototype.toString = function () { // 加上空字串隱式轉換成字串 let result = ''; for (let i of this.items) { // 加上' '可以在元素中以空格隔開 result += i + ' '; } return result; } // 以上程式碼也可以寫成ES6箭頭函式形式如: // Queue.prototype.enqueue = (element) => { // this.item.push(element); // } }

2.使用佇列:

 // 使用佇列
        let q = new Queue();

        // 將資料插入佇列中
        q.enqueue(10);
        q.enqueue(20);
        q.enqueue(30);
        q.enqueue(40);

        // 佇列前端的元素刪除(10)
        console.log(q.dequeue());

        // 檢視佇列前端的元素(20)
        console.log(q.front());

        // 檢視棧是否為空(false,目前棧還有3個元素)
        console.log(q.isEmpty());

        // 檢視佇列元素個數(3)
        console.log(q.size());

        // 轉化成以空格隔開的字串形式(20 30 40)
        console.log(q.toString());

3.控制檯

在這裡插入圖片描述


總結

由於自身水平有限,本篇文章僅代表個人理解,如有錯誤,歡迎指正!與君共勉!