佇列是先進先出(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...