迴圈佇列 陣列實現

2022-06-16 04:48:10 字數 1553 閱讀 4915

目錄首先準備基本類

class circlearray 

}

public void addqueue(int n) 

//直接將資料加入

arr[rear] = n;

//讓rear後移,這裡必須取模,考慮陣列下標越界

rear = (rear + 1) % maxsize;

}

rear指向的是隊尾元素的後乙個位置,與陣列大小取模可以解決下標越界問題

因為是指向的後乙個位置,所以在新增時可以存入陣列,移動下標

public int getqueue() 

int val = arr[front];

front = (front + 1) % maxsize;

return val;

}

front直接指向的就是隊首的位置,因為是迴圈佇列,同樣要考慮下標越界

出隊後,要向後移動下標,所以不能直接return出隊的元素,儲存出隊元素

移動front,最後return儲存的出隊元素

public int peekqueue() 

return arr[front];

}

public int size()
需要注意的是:

rear的索引在front前面的情況,在普通佇列中rear的索引大於front,可以通過簡單的rear - front得出元素個數

但是迴圈佇列會出現rear的索引小於front的情況,簡單的相減會出現負數的情況,顯然不符合要求,

利用rear+maxsize可使rear的索引大於front,然後相減的結果% maxsize

(rear + maxsize - front) % maxsize == rear - front

public void showqueue() 

// 思路:從front開始遍歷,遍歷多少個元素

for (int i = front; i < front + size(); i++)

}

思路:算出佇列有效元素個數,從front位置開始列印,下標向後移動,取模防止下標越界,迴圈遍歷陣列

public boolean isfull()
陣列不填滿,隊首和隊尾之間空乙個位置,即當元素儲存到佇列倒數第二個元素時,rear指向最後乙個位置,

此時(rear + 1) % maxsize == front

public boolean isempty()

佇列 陣列實現 迴圈佇列

1 陣列佇列.cpp 定義控制台應用程式的入口點。2 3 include4 include5 include abs 6 include7 include8 using namespace std 9 10 定義乙個佇列的結構體11 struct myqueue12 17 18 規則說明 19 nh...

陣列實現迴圈佇列

1 動態陣列型別 typedef struct qnode queue 1 分配結構體內存與陣列記憶體 queue initialize1 相應main函式 int main 2 只分配陣列記憶體不分配結構記憶體 int initialize2 queue q 相應main函式 int main 2...

迴圈陣列實現佇列

佇列是先進先出 fifo 模式,從隊尾加入元素的操作叫入隊,從隊首刪除元素的操作叫出隊 設定兩個指標分別為front指向隊首,real指向隊尾。開始時front和real分別為 1。當有元素入隊時real 1 當有元素出隊時front 1.public class queuesimulation s...