用陣列實現乙個迴圈佇列,難點就在於如何判斷陣列是否滿了,不論是書上的方法,還是一些大佬的寫法,都是利用乙個計算去判斷:(rear + maxsize - front) % maxsize
有的小夥伴天資聰穎一下就理解了,有的小夥伴可能理解不夠深刻,只能牢牢記住這個公式
在這裡我給大夥分享一種思路:
其實上面的思路的本質就是:判斷尾指標是否追上了頭指標,很多小夥伴可能就在你追我,我追你的過程中就懵逼了
其實我們完全可以忽略這個過程,我們只需要定義乙個變數size,add()乙個元素我就size++,poll()乙個元素我就size--,只要size是小於佇列的最大長度,就說明是可以add()的。
具體可以看下**:
public class ringqueue
public void add(int value)
arr[putindex] = value;
size++;
// 計算下乙個放入元素的位置
putindex = nextindex(putindex);
}public int poll()
int ans = arr[pollindex];
size--;
// 計算下乙個 poll 元素的位置
pollindex = nextindex(pollindex);
return ans;
}/**
* 計算下乙個 put,poll 元素的位置
* 如果當前元素所在的位置還沒到陣列的最後乙個位置,那就 i++
* 如果當前元素所在的位置已經是陣列的最後乙個位置了,那下乙個位置就是陣列的開頭 0
* @param i 當前元素的位置
* @return
*/public int nextindex(int i)
}public static void main(string args)
}
如果說在做演算法題的過程中,需要自己實現資料結構,通常我們可以定義一些額外的變數來簡化我們的某些操作 佇列 陣列實現 迴圈佇列
1 陣列佇列.cpp 定義控制台應用程式的入口點。2 3 include4 include5 include abs 6 include7 include8 using namespace std 9 10 定義乙個佇列的結構體11 struct myqueue12 17 18 規則說明 19 nh...
用陣列設計迴圈佇列
設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...
陣列實現迴圈佇列
1 動態陣列型別 typedef struct qnode queue 1 分配結構體內存與陣列記憶體 queue initialize1 相應main函式 int main 2 只分配陣列記憶體不分配結構記憶體 int initialize2 queue q 相應main函式 int main 2...