由於順序佇列有「假溢位」的缺點,所以在應用中,運用更多的是迴圈佇列來實現佇列的順序儲存。
(由於引用傳引數,所以原始檔需要.cpp字尾,即c++檔案儲存。)
迴圈佇列的判空條件為:q.rear == q.fornt;
迴圈佇列的判讀隊滿的條件是:(q.rear + 1) % maxsize == q.fornt;
下面是佇列實現的儲存型別結構體:
#define maxsize 50
typedef
int elemtype;
typedef
struct
sqqueue;
下面是對佇列的一些基本操作:
void
initqueue
(sqqueue &q)
;bool isempty
(sqqueue &q)
;bool enqueue
(sqqueue &q, elemtype e)
;//進隊
bool dequeue
(sqqueue &q, elemtype &e)
;//出隊
bool gethead
(sqqueue q, elemtype &e)
;//獲取頭元素
下面是乙個測試主方法:
int
main()
gethead
(squeue, s)
;printf
("隊頭元素為:%d \n"
, s)
;printf
("隊所有元素為:");
while
(squeue.rear != squeue.fornt)
return0;
}
執行結果如下:
完整的源程式如下:
#include
"stdio.h"
#include
"stdlib.h"
#define maxsize 50
typedef
int elemtype;
typedef
struct
sqqueue;
void
initqueue
(sqqueue &q)
;bool isempty
(sqqueue &q)
;bool enqueue
(sqqueue &q, elemtype e)
;//進隊
bool dequeue
(sqqueue &q, elemtype &e)
;//出隊
bool gethead
(sqqueue q, elemtype &e)
;//獲取頭元素
intmain()
gethead
(squeue, s)
;printf
("隊頭元素為:%d \n"
, s)
;printf
("隊所有元素為:");
while
(squeue.rear != squeue.fornt)
return0;
}void
initqueue
(sqqueue &q)
bool isempty
(sqqueue &q)
bool enqueue
(sqqueue &q, elemtype e)
bool dequeue
(sqqueue &q, elemtype &e)
bool gethead
(sqqueue q, elemtype &e)
迴圈佇列操作實現
該實現front始終指向當前的頭結點,rear始終指向尾結點的 下乙個結點 include include define maxnum 10 define datatype int typedef struct queue queue void initqueue queue p int empty...
佇列 迴圈佇列的實現
為了可以重新利用佇列底層陣列中已刪除元素所佔的空間,消除可能出現的 假滿 現象,將順序佇列改進為迴圈佇列。迴圈佇列是首尾相連的佇列 當front rear變數達到底層陣列的capacity 1之後,再向前以為就變成0.入隊 1 判斷佇列是否已滿,已滿丟擲越界異常 2 不滿的話把元素查到隊尾,並且re...
普通佇列與迴圈佇列的概念與實現
author 田源 date 2021 03 12 19 26 description 普通佇列實現 入隊操作 push x this arr this tail x this tail 1 出隊操作 pop this head 1 佇列是否為空 isempty 佇列是否滿了 isfull 獲取隊首...