資料結構 c 佇列

2021-07-11 09:45:56 字數 1740 閱讀 7822

佇列是先進先出(fifo)的線性表,元素從隊尾進從隊頭出,有的時候也是比較常用的,同樣分為順序儲存結構和鏈式儲存結構,其中順序儲存結構可以實現迴圈佇列。

首先同樣先定義結構體,同樣佇列應包含有隊頭指標和隊尾指標,分別指向頭結點和隊尾結點,而指向的結點需有資料域和指向下個結點的指標域:

#include #include #include typedef struct qnodeqnode,* queueptr;

typedef structlinkqueue;

需要注意鏈式佇列同樣需要乙個頭結點。

定義一系列操作函式:

void initqueue(linkqueue &q);

void clearqueue(linkqueue &q);

int queuelength(linkqueue q);

void enqueue(linkqueue &q,char c);

void dequeue(linkqueue &q,char &c);

主函式以及以上函式的實現:

main()

void initqueue(linkqueue &q)

void clearqueue(linkqueue &q)

}int queuelength(linkqueue q)

return i;

}void enqueue(linkqueue &q,char c)

void dequeue(linkqueue &q,char &c)

free(p); //釋放結點

}

執行結果:

因為佇列的元素是從隊頭出去的,所以不能採用動態分配的順序儲存結構(否則出佇列後那部分空間就浪費了)。所以只有實現迴圈佇列時使用儲存結構,並且需設定乙個最大佇列長度。

迴圈佇列的實現有2種方法:(1)設一標誌位,標誌當前是否為空是否為滿;(2)少用乙個元素空間,這樣當q.front == q.rear時就能判斷隊空。

定義結構體,需要儲存空間基址,整形值儲存隊頭指標、隊尾指標。

#include #include #define maxqsize 5

typedef struct sqqueue; //順序佇列作為迴圈佇列,少用乙個元素空間使得以判斷隊列為空還是滿

定義一系列函式:

void initqueue(sqqueue &q);

int queuelength(sqqueue q);

void enqueue(sqqueue &q,char c);

void dequeue(sqqueue &q,char &c);

主函式以及以上函式的實現:

main()

void initqueue(sqqueue &q)

int queuelength(sqqueue q)

void enqueue(sqqueue &q,char c)

void dequeue(sqqueue &q,char &c)

執行結果:

C 資料結構 佇列

佇列是一種特殊線性的資料結構,也是一種運算受限制的線性表,跟棧恰好相反運算規則先進先出。插入元素叫做入隊或者進隊,插入的一方叫做隊尾 刪除元素叫做出隊,刪除的一端叫做隊首。順序表佇列 class sqqueueclass 非迴圈佇列 region 判斷佇列是否為空 public bool queue...

C資料結構 佇列

leetcode102題,二叉樹的層次遍歷 leetcode199題,二叉樹的右檢視 佇列的思路如下 1 有head tail 2 入隊靠tail,出隊靠head 3 如果每輪需要出隊,那麼把tail head存下來,做乙個for迴圈!非常重要 define maxlen 1000 intenque...

C 資料結構 佇列

佇列作為線性表的另乙個資料結構,只允許在表的前端進行刪除操作,而在表的後端進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。先來看下用法 queue queue newqueue queue.enqueue 1 queue.enqueue 2 queue.enqueue 3 queue.enqu...