定義:佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元素稱為出隊。因為佇列只允許在一端插入,在另一端刪除,所以只有最早進入佇列的元素才能最先從佇列中刪除,故佇列又稱為先進先出(fifo—first in first out)線性表。
今天我們將將順序佇列和迴圈佇列(附**實現)
順序佇列
首先我們要有一塊連續的儲存空間去儲存我們佇列的元素,這裡我們使用陣列。當然還需要兩個指標,乙個(front)指向隊頭,乙個(rear)指向隊尾元素。
所謂順序佇列就是在隊尾加入乙個元素rear+1,從隊頭刪除乙個元素front+1。當rear增加到指向分配的連續空間之外時,佇列無法再插入新元素,但這時往往還有大量可用空間未被占用,這些空間是已經出隊的佇列元素曾經占用過得儲存單元,這是順序佇列的乙個最大的缺點,浪費記憶體。
迴圈佇列
解決順序佇列的缺點的辦法就是,當rear增加到指向分配的連續空間之外時,將rear指向陣列的第乙個位置。
這實際上是把佇列空間想象成乙個環形空間,環形空間中的儲存單元迴圈使用,用這種方法管理的佇列也就稱為迴圈佇列。除了一些簡單應用之外,真正實用的佇列是迴圈佇列。
下面是迴圈佇列的c#**實現:
/// /// 迴圈佇列
///
public class queue
public int maxsize
public int front
public int rear
public int length
public queue(int maxsize)
/// /// 向佇列中插入乙個元素
///
/// 加入的元素的值
public void insert(int elem)
if (rear == maxsize-1)
arr[++rear] = elem;
length++;
}/// /// 從對壘中移除對頭元素
///
/// 返回移除的元素
public int? remove()
int elem = arr[front++];
if (front == maxsize)
length--;
return elem;
}/// /// 檢視隊頭元素
///
///
public int? peek()
return arr[front];
}/// /// 判斷佇列是否為空
///
///
public bool isempty()
/// /// 判斷佇列是否已滿
///
///
public bool isfull()
return false;}}
資料結構之佇列
八 佇列 鏈式佇列 鍊錶實現 隊尾 rear 隊首 front 靜態佇列 陣列實現 必須是迴圈佇列 需要幾個引數來確定,各引數含義 1 佇列初始化 front和rear值都是0 2 佇列非空 front代表佇列第乙個元素 rear代表佇列最後乙個元素的 下乙個元素 3 佇列空 front和rear相...
資料結構之佇列
與棧相反,佇列是一種先進先出的線性表,它只允許在表的一端進行,而在另一端刪除元 素。在佇列中,允許插入的一端叫做隊尾,允許刪除的一端則稱為隊頭。1 鏈佇列 佇列的鏈式表示和實現 用鍊錶表示的佇列簡稱為鏈佇列,乙個鏈佇列顯然需要兩個分別指示對頭和隊尾的指標 分別稱為頭指 針和尾指標 才能唯一確定。這裡...
資料結構之佇列
一 佇列的介紹 佇列 queue 是一種線性儲存結構。它有以下幾個特點 1 佇列中資料是按照 先進先出 fifo,first in first out 方式進出佇列的。2 佇列只允許在 隊首 進行刪除操作,而在 隊尾 進行插入操作。佇列通常包括的兩種操作 入佇列 和 出佇列。1.佇列的示意圖 佇列中...