迴圈佇列的實現

2021-10-17 15:08:17 字數 2956 閱讀 6166

都是自己平時練習所寫如果有錯誤請多包涵,圖都為自己所畫比較醜請多多見諒。

佇列的順序靜態陣列的實現有很多缺陷:

1:開闢記憶體空間過大過小難以掌控,開闢空間後無法改變

2:會記憶體沒有完全利用會發生假溢位(在有資料出佇列和資料入隊列隊滿時發生)

靜態陣列實現最大問題就是假溢位如下圖

這樣迴圈的使用位址空間--------迴圈佇列

2:初始化隊頭隊尾將隊置為空隊

typedef struct

sequence;//重新命名

void initsequence(sequence &sq)//初始化

所以這樣的方法及完成了隊隊尾指標的後移,又方便判斷是否隊滿。同時又不會浪費空間 

void entersequence(sequence &sq,int e)//入隊

入隊注意事項:對於資料輸入的數量是否合法,每一次輸入都需要判斷是否為空,同時注意入隊的演算法會浪費乙個資料記憶體

//入隊

int n;

int e;//接收資料

printf("請輸入入隊資料數量:");

scanf("%d",&n);

while(n> maxsize-1)

printf("入隊:");

還是特殊情況在入隊an->a1的入隊,在完成該入隊後sq.rear+1=sq.front。所以 sq.rear-sq.font就要進行分類討論,複雜度就會高一點

則應使用(sq.rear-sq.front+maxsize)%maxsize,這樣就會解決該問題

但是使用sq.rear-sq.font是可以完成該操作的 ,但是需要進行判斷

if(sq.rear-sq.font>0)   length=sq.rear-sq.font;

else length=(sq.rear-sq.front+maxsize)%maxsize

這樣使用沒有上述方式簡便

void getlengthsequence(sequence sq)//當前隊的長度

void getelemsequence(sequence sq)//獲取當前隊頭、隊尾資料

出隊需要注意隊頭指標的後移(和隊尾指標相同)以及對隊的空判斷(沒一次輸出都需要進行判斷)

void outsequence(sequence &sq, int &e)//出隊

出佇列操作: 如果隊頭移動到隊尾相同指向的位置則說明隊已全部出隊

//

printf("出隊:");//出隊

sequence;//重新命名

void initsequence(sequence &sq)//初始化

void entersequence(sequence &sq,int e)//入隊

void getlengthsequence(sequence sq)//當前隊的長度

void getelemsequence(sequence sq)//獲取當前隊頭、隊尾資料

void outsequence(sequence &sq, int &e)//出隊

void main()

printf("入隊:");

for (int i = 0; i < n; i++)

//獲取隊長度

getlengthsequence(sq);

//獲取當前隊頭、隊尾資料

getelemsequence(sq);

//出隊

printf("\n出隊:");

佇列 迴圈佇列的實現

為了可以重新利用佇列底層陣列中已刪除元素所佔的空間,消除可能出現的 假滿 現象,將順序佇列改進為迴圈佇列。迴圈佇列是首尾相連的佇列 當front rear變數達到底層陣列的capacity 1之後,再向前以為就變成0.入隊 1 判斷佇列是否已滿,已滿丟擲越界異常 2 不滿的話把元素查到隊尾,並且re...

迴圈佇列的實現

佇列是一種先進先出的線性表,具有線性表的特性 分為鏈式佇列與順序佇列 順序佇列 用一段位址連續的儲存單元儲存資料元素,定義兩個游標 指向隊頭 的游標 front 指向隊尾的游標 rear 如果front rear隊列為空,如果 rear 1 maxsize front佇列滿 此為迴圈佇列 如普通佇列...

迴圈佇列的實現

include include includeusing namespace std typedef int qelementtype typedef int status define error 0 define ok 1 define maxqsize 10 佇列的資料抽象 typedef s...