資料結構與演算法(13) 佇列

2021-07-31 09:42:01 字數 3166 閱讀 1766

定義:佇列是一種只能在一端插入(隊尾),在另一端刪除(隊首)的有序線性表。

佇列的第乙個插入的元素也是第乙個被刪除的元素。所以,佇列是一種先進先出(fifo,first in first out)或後進後出(lilo,last in last out)線性表。

佇列操作的專有名稱

向佇列中插入乙個元素,稱為入隊(enqueue)

從佇列中刪除乙個元素,稱為出隊(dnqueue)

試圖對乙個空佇列執行出隊操作稱為下溢(underflow)

試圖對乙個滿佇列執行入隊操作稱為溢位(overflow)

通常認為下溢和下溢是異常

常用的實現方式:

1.基於簡單迴圈陣列的實現方法

2.基於動態迴圈陣列的實現方法

3.基於鍊錶的實現方法

/**

* 基於簡單迴圈陣列實現佇列

* 侷限性:用於實現佇列的陣列最大空間必須預先宣告且不能改變

*/public

class

arrayqueue

/*** 建立佇列

*@param size 佇列大小

*@return 新的佇列

*/public

static arrayqueue createqueue(int size)

/*** 檢查佇列是否為空

*@return true 表示隊列為空 false 佇列不為空

*/public

boolean

isempty()

/*** 檢查佇列是否為滿佇列

*@return true 滿佇列 false 不是滿佇列

*/public

boolean

isfull()

/*** 獲取佇列中元素的個數

*@return

*/public

intgetqueuesize()

/*** 入佇列

*@param data 入佇列的元素

*@throws exception

*/public

void

enqueue(int data) throws exception else }}

/*** 出隊

*@return 出隊的元素值

*@throws exception

*/public

intdequeue() throws exception else else

}return data;

}}

/**

* 基於動態迴圈陣列實現佇列

*/public

class

dynarrayqueue

/*** 建立佇列

*@return 新的佇列

*/public

static dynarrayqueue createqueue(int size)

/*** 檢查佇列是否為空

*@return true 表示隊列為空 false 佇列不為空

*/public

boolean

isempty()

/*** 檢查佇列是否為滿佇列

*@return true 滿佇列 false 不是滿佇列

*/public

boolean

isfull()

/*** 獲取佇列中元素的個數

*@return

*/public

intgetqueuesize()

int size = (capacity - front + rear + 1) % capacity;

// 如果size為0,說明隊列為滿佇列

if (size == 0) else

}/**

* 入佇列

*@param data 入佇列的元素

*@throws exception

*/public

void

enqueue(int data) throws exception else }}

/*** 對佇列進行擴容

*/private

void

resizequeue()

// 將元素按入隊順序排列好

if (rear < front)

rear = rear + initcapacity;}}

/*** 出隊

*@return 出隊的元素值

*@throws exception

*/public

intdequeue() throws exception else else

}return data;

}}

/**

* 基於鍊錶實現的佇列

* 通過在鍊錶末端插入元素的方法實現入隊

* 通過刪除煉表表頭元素實現出隊

*/public class

linklistqueue

/**

* 建立佇列

* @return 新建的佇列

*/public linklistqueuecreatequeue()

/*** 檢查佇列是否為空

* @return true 空佇列 false 非空佇列

*/public boolean isempty()

/*** 獲取佇列中元素的個數

* @return

*/public int getqueuesize()

return size;

}/**

* 入隊

* @param data 入隊的元素值

*/public void enqueue(anytype data)

// 使尾節點指向新節點

rearnode = newnode;

// 如果是第乙個入隊元素,修改隊首值

if (frontnode == null)

}/**

* 出隊

* @return 出隊元素的值

* @throws exception

*/public anytype dequeue() else

}return data;

}}

資料結構與演算法筆記 lesson 13 佇列

是只允許在一端繼續插入操作,而在另一端進行刪除操作的線性表。是一種先進先出 fifo 的線性表。輸入快取區接收鍵盤的輸入就是按佇列的形式輸入和輸出的 棧一般用順序表來實現,佇列常用鏈來實現 typedef struct qnode qnode queueprt typedef struct link...

資料結構與演算法 6 佇列

引導 今天我們進入最後一章資料結構的學習 佇列。通過前面幾篇的學習,我們已經了解到了陣列,鍊錶,棧等資料結構。資料結構就是堆特定問題進行抽象話的東西,內容並不多。後面就開始介紹利用這些基礎的資料結構加上演算法來解決特定的問題。佇列佇列和棧都是抽象的資料結構,是乙個操作受限的線性表。它的特點就是先進先...

資料結構與演算法4 佇列

佇列 佇列的定義 佇列的基本操作 1 初始化佇列 initqueue q 將佇列q設定成乙個空佇列。2 入佇列 enqueue q,x 將元素x插入到隊尾中,也稱 進隊 插入 3 出佇列 outqueue q,e 將佇列q的隊頭元素刪除,並用e返回其值,也稱 退隊 刪除 4 取隊頭元素 gethea...