佇列(queue)是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表。
(1)允許刪除的一端稱為隊頭(front)。
(2)允許插入的一端稱為隊尾(rear)。
(3)當佇列中沒有元素時稱為空佇列。
(4)佇列亦稱作先進先出(first in first out)的線性表,簡稱為fifo表。
佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾,每次離開的成員總是佇列頭上的(不允許中途離隊)。
佇列的順序儲存結構
佇列的順序儲存結構稱為順序佇列,順序佇列實際上是運算受限的順序表。
和順序表一樣,順序佇列利用記憶體中一段連續的儲存空間來存放當前佇列中的元素。
由於佇列的隊頭和隊尾的位置是變化的,設定兩個指標front和rear分別指示隊頭元素和隊尾元素,它們的初值在佇列初始化時均應置為0。
入隊時:將新元素插入rear所指的位置的後一位。
出隊時:刪去front所指的元素,然後將front加1並返回被刪元素。
①「下溢」現象
當隊列為空時,做出隊運算產生的溢位現象。「下溢」是正常現象,常用作程式控制轉移的條件。
② "真上溢"現象
當佇列滿時,做進棧運算產生空間溢位的現象。「真上溢」是一種出錯狀態,應設法避免。
③ "假上溢"現象
由於入隊和出隊操作中,頭尾指標只增加不減小,致使被刪元素的空間永遠無法重新利用。當佇列中實際的元素個數遠遠小於記憶體中本分配的空間時,也可能由於尾指標已超越向量空間的上界而不能做入隊操作。該現象稱為"假上溢"現象。如下圖
如上圖所示,這種頭尾相接的順序儲存結構稱為迴圈佇列(circular queue)。
迴圈佇列中需要注意的幾個重要問題:
①隊空的判定條件,隊空的條件是front=rear;
②隊滿的判定條件,(rear+1)%queuesize=front。queuesize為佇列初始空間大小。
package queue;
/** * @classname: cirqueue
* @description: 線性佇列
* @date 2023年6月3日 下午19:55
* @param 無
*/public class cirqueue
/**
* 初始化指定長度的佇列
* @param size
*/
public cirqueue(int size)
/**
* 將乙個物件追加到佇列尾部
* @param value
* @return 佇列滿時返回false,否則返回true
* @autho 林志強
*/ public boolean enqueue(object value)else }
/**
* 佇列頭部出隊
* @return 返回出列的隊頭元素
* @author 林志強
*/
public object dequeue()else }
/**
* 佇列長度
* @return int型的資料
* @author 林志強
*/
public int size()
/**
* 判斷是否為空
* @return int型的資料
* @author 林志強
*/
public boolean isempty()
/**
* 獲取隊頭元素但是不出隊
* @return 返回隊頭元素
* @author 林志強
*/
public object getqueue()
/**
* 列印佇列中資料
* @author 林志強
*/
public void display()
system.out.println();
}public static void main(string args)
c.display();
// system.out.println(c.getqueue());
system.out.println(c.size());
// system.out.println(c.isempty());
// system.out.println(c.dequeue());
// system.out.println(c.dequeue());
// system.out.println(c.dequeue());
// system.out.println(c.dequeue());
// system.out.println(c.dequeue());
// system.out.println(c.dequeue());
// c.display();}}
208017534 / qiang220316,歡迎一起交流一起進步。
資料結構之線性佇列
1 佇列的定義及基本運算 定義 佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 1 允許刪除的一端稱為隊頭 front 2 允許插入的一端稱為隊尾 rear 3 當佇列中沒有元素時稱為空佇列 4 佇列亦稱作先進先出 first in first out 的線性表,簡稱...
資料結構之線性結構之佇列
佇列 操作受限制的線性表 先進先出,一端插入,另一端輸出 如果是正常的線狀佇列,前面刪除資料部分的空間無法使用,會造成浪費 所有出現迴圈佇列 迴圈佇列會出現的問題 空滿時front rear都是相等,無法區分 原因 n種長度值對應n 1種情況 解決方法 使用額外標記 size或者tag 僅僅使用n ...
Java資料結構之陣列佇列和迴圈佇列的實現
動態陣列的封裝 public class array data newdata 建構函式 param capacity public array int capacity 無參建構函式,初始化陣列容量為10 public array 獲取陣列大小 return public intgetsize 獲...