關於數組模擬循環隊列的有效長度的計算公式,自己參考了一些博客和書上的描述,寫了一段推導過程。
1.准備
front 就指向隊列的第一個元素, 也就是說 arr[front] 就是隊列的第一個元素。
front 的初始值 = 0。
rear 指向隊列的最后一個元素的后一個位置.,因為希望空出一個空間做為約定。
rear 的初始值 = 0。
arrSize為循環數組長度。
2.推導
由於循環隊列可循環使用,所以循環隊列的有效長度為分為兩種情況:
1.rear > front
有效長度 = rear - front
2.rear < front
有效長度 = front - rear
簡而言之就是有效長度為rear與front之間差的絕對值,有效長度 = | rear - front |。
但是計算機中無法使用取絕對值的運算,但是可以利用取模運算符巧妙地實現有效長度的運算:
有效長度 = | rear - front | = | rear % arrSize - front % arrSize | = | rear % arrSize - front % arrSize + 0 | = | rear % arrSize - front % arrSize + arrSize % arrSize | = | (rear + arrSize - front) % arrSize |
由於rear + arrSize - front > 0,所以
有效長度 = (rear + arrSize - front) % arrSize