要求順序迴圈佇列不損失乙個空間全部能夠得到有效利用,請採用設定標誌位tag的方法解決「假溢位」問題,實現順序迴圈佇列演算法。
考察迴圈隊列入隊和出隊演算法思想。設定標誌位tag,初始時tag=0,當元素入隊成功,令tag=1;出隊成功令tag-0。則隊列為空的判定條件為front==rear&&tag==0;佇列滿的判斷條件為front==rear&&tag==1.
main.cpp
#include #define queuesize 100
#define maxsize 100
#include #include using namespace std;
typedef int datatype;
typedef struct squeue
scqueue;
void printdata(datatype e);
int checktype(datatype e);
void initqueue(scqueue *scq)
int queueempty(scqueue scq)
else }
int enqueue(scqueue *scq, datatype e)
else }
int dequeue(scqueue *scq, datatype *e)
else }
void displayqueue(scqueue scq)
if (scq.front1e-6)
if (e>='a'&&e<='z'|| e >= 'a'&&e <= 'z')
else
}
結果:
順序佇列的假溢位及順序迴圈佇列的表示(C 版)
順序佇列的假溢位 按照前面所說的順序佇列的儲存方法 有可能造成 假溢位 這種溢位不是因為儲存空間不夠而溢位,而是經過多次插入和刪除操作引起的,像這種有儲存空間而不能進行插入的元素操作的溢位稱為 假溢位 為了避免順序佇列造成的 假溢位 現象,通常採用順序迴圈佇列來實現佇列的順序儲存。順序迴圈佇列的定義...
佇列 順序佇列儲存結構的不足(假溢位)
我們假設乙個佇列有n個元素,則順序儲存的佇列需建立乙個大於n的陣列,並把佇列的所有元素儲存在陣列的前n個單元,陣列下標為0的一端即是隊頭。所謂的入佇列操作,其實就是在隊尾追加乙個元素,不需要移動任何元素,因此時間複雜度為0 1 可有時想想,為什麼出佇列時一定要全部移動呢,如果不去限制佇列的元素必須儲...
迴圈佇列 解決順序佇列的假溢位問題
迴圈佇列 當進行動態建立佇列的時候,也只不過是向後繼續不斷的申請記憶體空間,即時前面出隊操作釋放掉了前面的空間,但是指標依舊會向後進行移動,直到達到系統預留給程式的記憶體上界被強行終止,這對於極為頻繁的佇列操作和程式而言是致命的,這時候,就需要對我們的佇列進行優化,使用更為優秀的結構 迴圈佇列。初始...