資料結構之佇列

2021-09-29 20:01:35 字數 1724 閱讀 9521

定義:佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(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.佇列的示意圖 佇列中...