誰都能看懂的用陣列實現環形佇列

2021-10-23 03:41:21 字數 2407 閱讀 8988

介紹:佇列又稱為「先進先出」(fifo)線性表。限定插入操作只能在隊尾進行,而刪除操作只能在隊首進行

應用場景:排隊front:佇列頭,指向佇列的第乙個元素,初始值為0

rear:佇列尾,只想佇列的最後乙個元素的後乙個位置,所占用的位置作為約定(空乙個位置)初始值為0

maxsize:總長度初始值需建立物件時賦予

隊列為空的條件:rear==front

佇列滿的條件:(rear + 1) % maxsize == front

佇列中有效的資料個數 (rear + maxsize - front) % maxsize

建議畫兩個例子將值帶到公式中計算一下方便理解

空佇列示意圖:

隊列為空:0 == 0 結果為:true

佇列滿:(0+1) % 8 == 0 結果為:false

有效資料個數:(0 + 8 - 0) % 8 結果為:0

佇列中存滿的示意圖:

隊列為空:7 == 0 結果為:false

佇列滿:(7+1) % 8 == 0 結果為:true

有效資料個數:(7 + 8 - 0) % 8 結果為:7

此時佇列是從陣列下標為0的位置到下標為6的位置為有效元素

取出佇列中第乙個數並新增乙個數時:

隊列為空:0 == 1 結果為:false

佇列滿:(0 + 1) % 8 == 1 結果為:true

有效資料個數:(0 + 8 - 1) % 8 結果為:7

但此時佇列是從陣列下標為1的位置到下標為7的位置為有效元素

這樣就實現了環形佇列,使這個陣列可以重用

public

class

circinarrayqueuedemo

catch

(exception e)

break

;case

'h':

trycatch

(exception e)

break

;case

'e':

scanner.

close()

; loop =

false

;break;}

} system.out.

println

("程式退出!");

}}/** * 環形佇列

*/class

circinarray

//判斷佇列是否已滿

public

boolean

isfull()

//判斷佇列是否為空

public

boolean

isempty()

//新增資料到佇列

public

void

addqueue

(int value)

//新增資料到佇列

arr[rear]

= value;

//佇列尾後移

rear =

(rear +1)

% maxsize ;

}//資料出佇列

public

intgetqueue()

int temp = arr[front]

; front =

(front +1)

% maxsize;

return temp;

}public

intsize()

//顯示當前佇列資料

public

void

showqueue()

for(

int i = front; i < front +

size()

;i++)}

//顯示佇列頭,不取出資料

public

intheadqueue()

return arr[front];}

}

新手都能看懂的Dubbo!

1.dubbo架構 上述節點簡單說明 呼叫關係說明 1.服務容器負責啟動,載入,執行服務提供者。2.服務提供者在啟動時,向註冊中心註冊自己提供的服務。3.服務消費者在啟動時,向註冊中心訂閱自己所需的服務。4.註冊中心返回服務提供者位址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者...

小白都能看懂的block

首先說明一下,我自己也是乙個小白 這是我對block的一點認識或總結,有不對的地方,希望大家指出來 block就是乙個 塊,用來執行一小段程式的,通常我們定義乙個block 可以用它的基本模型,返回值型別 變數的名字 引數型別 例如 int myblock int 這就是定義了乙個block 這個變...

小白都能看懂的softmax詳解

softmax把一些輸入對映為0 1之間的實數,並且歸一化保證和為1,因此多分類的概率之和也剛好為1 或參考 小白都能看懂的softmax詳解 在機器學習尤其是深度學習中,softmax是個非常常用而且比較重要的函式,尤其在多分類的場景中使用廣泛。他把一些輸入對映為0 1之間的實數,並且歸一化保證和...