佇列簡單操作

2021-07-09 06:04:34 字數 1939 閱讀 5856

是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。

佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元素成為出隊。因為佇列只允許在一段插入,在另一端刪除,所以只有最早進入佇列的元素才能最先從佇列中刪除,故佇列又稱為先進先出(fifo—first in first out)線性表。[1]

順序佇列

建立順序佇列結構必須為其靜態分配或動態申請一片連續的儲存空間,並設定兩個指標進行管理。乙個是隊頭指標front,它指向隊頭元素;另乙個是隊尾指標rear,它指向下乙個入隊元素的儲存位置。

每次在隊尾插入乙個元素是,rear增1;每次哎隊頭刪除乙個元素時,front增1。隨著插入和刪除操作的進行,佇列元素的個數不斷變化,佇列所佔的儲存空間也在為佇列結構所分配的連續空間中移動。當front=rear時,佇列中沒有任何元素,稱為空佇列。當rear增加到指向分配的連續空間之外時,佇列無法再插入新元素,但這時往往還有大量可用空間未被占用,這些空間是已經出隊的佇列元素曾經占用過得儲存單元。

(1) 「下溢」現象:當隊列為空時,做出隊運算產生的溢位現象。「下溢」是正常現象,常用作程式控制轉移的條件。

(2)」真上溢」現象:當佇列滿時,做進棧運算產生空間溢位的現象。「真上溢」是一種出錯狀態,應設法避免。

(3)」假上溢」現象:由於入隊和出隊操作中,頭尾指標只增加不減小,致使被刪元素的空間永遠無法重新利用。當佇列中實際的元素個數遠遠小於向量空間的規模時,也可能由於尾指標已超越向量空間的上界而不能做入隊操作。該現象稱為」假上溢」現象。

在實際使用佇列時,為了使佇列空間能重複使用,往往對佇列的使用方法稍加改進:無論插入或刪除,一旦rear指標增1或front指標增1 時超出了所分配的佇列空間,就讓它指向這片連續空間的起始位置。自己真從maxsize-1增1變到0,可用取餘運算rear%maxsize和front%maxsize來實現。這實際上是把佇列空間想象成乙個環形空間,環形空間中的儲存單元迴圈使用,用這種方法管理的佇列也就稱為迴圈佇列。處了一些簡單應用之外,真正實用的佇列時迴圈佇列。[2]

在迴圈佇列中,當隊列為空時,有front=rear,而當所有佇列空間全佔滿時,也有front=rear。為了區別這兩種情況,規定迴圈佇列最多只能有maxsize-1個佇列元素,當迴圈佇列中只剩下乙個空儲存單元時,佇列就已經滿了。因此,佇列判空的條件時front=rear,而佇列判滿的條件時front=(rear+1)%maxsize。

#include 

#include

typedef

struct linklist node;

typedef

struct linkqueue linkqueue;

linkqueue* createlinkequeue()

linkqueue* insertnode(linkqueue *nowqueue, int i) else

return nowqueue;

}linkqueue* deletenode(linkqueue *nowqueue)

dnode = nowqueue->head;

if (nowqueue->head == nowqueue->tail) else

return nowqueue;

}void printlinkqueue(linkqueue *queue)

}int main()

printf("the number you wanna delete\n");

int h;

scanf("%d", &h);

for (int i = 1; i <= h; i++)

printlinkqueue(queue);

return

0;}

queue佇列簡單操作

queue fifo 先進先出 lifoquere 先進後出 棧 priorityqueue 優先佇列 通過自定義演算法實現 為什麼用queue庫 python標準庫是執行緒之間常見的資料交換形式,queue的使用可以確保python的執行緒安全 2.常用方法 q queue.queue maxsi...

多執行緒 佇列的簡單操作

nsoperationqueue queue nsoperationqueue alloc init queue.maxconcurrentoperationcount 2 執行緒池中的執行緒數,也就是併發運算元。預設情況下是 1,1表示沒有限制,這樣會同時執行佇列中的全部的操作。for nsint...

佇列的簡單理解和基本操作

2.佇列的順序儲存結構 2.2 迴圈佇列 3.佇列的鏈式儲存結構 3.4.2 鏈式隊列入隊 3.4.3 鏈式佇列出隊 4.雙端佇列 4.2 輸出受限的雙端佇列 4.3 輸入受限的雙端佇列 只允許在一端插入,在另一端刪除分配一塊連續的儲存單元存放佇列的元素 define maxsize 100 動態陣...