佇列的基本概念 :
佇列和棧一樣是一種特殊的線性表。
棧是一種後進先出的資料結構。比如入棧順序為1,2,3,4,5的時候,出棧順序可能為5, 4, 3, 2, 1。可能為1,24,3,5
佇列和平時的排隊打飯一樣,先進入佇列的先出去,是按照進入的順序來出佇列的,比如入佇列順序為1,2,3,4,5的時候,出佇列順序只可能為1,2,3,4,5
進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。當佇列中沒有元素的時候,稱為空佇列。
佇列儲存結構
順序佇列
使用陣列:
隊頭指標不動----要大量搬移元素
隊頭是arr[0] 所以每次出佇列都會把arr[0] 之後的元素向前搬移。所以太耗費時間。
隊頭指標移動----存在假溢位
迴圈佇列
迴圈佇列如何解決佇列空或者滿?
少儲存乙個元素,在判斷的時候,判斷(tail + 1) % size 看是否等於head,如果相等代表佇列滿了,隊列為空的時候,tail == head。
鏈式佇列---用鍊錶作為佇列的底層資料結構 :
操作:**如下:
#include #include typedef int datatype;
/***佇列中的節點
*/typedef struct node *pnode, node;
/***佇列
phead 隊頭指標
ptail 隊尾指標
size 佇列大小
*/typedef struct queue queue;
/**初始化佇列
*/void queueinit(queue* queue);
/**入隊
*/void queuepush(queue* queue, datatype data);
/**出佇列
*/int queuepop(queue* queue, datatype* data);
/**判空
*/int queueempty(queue* queue);
/**
取隊頭元素
*/datatype queuefront(queue* q);
/**取隊尾元素
*/ datatype queueback(queue* q);
/**獲取佇列中元素的個數
*/ int queuesize(queue* q);
void testqueue();
int main()
void testqueue()
void queueinit(queue* queue)
void queuepush(queue* queue, datatype data)
else
}int queuepop(queue* queue, datatype* data)
int queueempty(queue* queue)
// 取隊頭元素
datatype queuefront(queue* q)
// 取隊尾元素
datatype queueback(queue* q)
// 獲取佇列中元素的個數
int queuesize(queue* q)
return count;
}
執行結果:
資料結構 佇列
一 佇列的迴圈陣列實現。1 初始化 空佇列。令rear front 0。2 入佇列 約定rear指向佇列尾元素的下乙個位置。入佇列時,先判斷佇列是否已滿,而後將array rear x 然後rear 3 出佇列 約定front指向佇列的首元素位置。出佇列時,先判斷佇列是否為空,而後返回隊首元素re ...
資料結構 佇列
資料參考自 資料結構c 語言描述 佇列是一種先進先出的資料結構,這與棧正好相反。下例是簡單的queue實現 queue.h檔案 ifndef queue h define queue h include include 資料元素結構 自定義 struct datatype 佇列元素最大數 const...
資料結構 佇列
code for fun created by dream whui 2015 1 25 include stdafx.h include include using namespace std define true 1 define false 0 define ok 1 define erro...