陣列模擬迴圈佇列

2021-10-01 09:59:46 字數 1121 閱讀 6159

前面我們用陣列模擬了佇列,大家有沒有想過乙個問題。不斷的入隊當rear=maxsize-1時說明隊滿了沒問題啊,接著我們不斷出隊只留乙個元素在隊中,此時仍然rear=maxsize-1,問題就暴露了出現一種假滿情況,目前的佇列是一次性使用顯然不符合現實情況。

這裡我們就把它優化一下,迴圈佇列就誕生了,通過取模的方式實現

我們可以把它想象為陣列的首尾被掰彎連線成乙個圓環,

迴圈佇列依然有兩個指標(變數)front、rear,不同於之前佇列的是rear指向最後乙個元素的後乙個,為什麼這麼做呢?

回想一下之前判斷隊空是front=rear時就判斷為空,如果rear還是指向最後乙個元素就會造成front=rear既可以表示隊空也能表示隊滿,所以在迴圈佇列中rear始終指向最後乙個元素的後乙個位置(即拿出乙個位置作為約定,誰都不要占用)

我們來看一下示意圖就明白了:

思路:

public

class

circlequeue

//判斷是否隊滿

public

boolean

isfull()

//判斷是否隊空

public

boolean

isempty()

//入隊

public

void

addqueue

(int n)

arr[rear]

=n;//rear後移

rear=

(rear+1)

%maxsize;

}//出隊

public

intgetqueue()

int value=arr[front]

; front=

(front+1)

%maxsize;

return value;

}//佇列中有效資料數

public

intsize()

}

佇列三 陣列模擬迴圈佇列

package com.hao.firstdemo.datastruct author haoxiansheng public class testcirclearry class circlearray 判斷佇列是否滿了 return public boolean isfull 判斷佇列是否為空 ...

使用陣列模擬佇列 迴圈佇列和棧

在一些考試題中以及筆試面試的過程中,在需要使用stack和queue的時候,可能被要求不能使用stl中相關的庫函式,也就意味著我們需要使用純c進行程式設計。但是如果在考試中或者筆試面試中,為了要使用棧和佇列,而去寫乙個完整的資料結構是比較大費周章,況且在時間上也不一定允許,因此,使用陣列來模擬棧和佇...

模擬迴圈排程 佇列

include include define len 100005 現有名稱為namei且處理時間為timei的n個任務按照順序排成一列,cpu通過迴圈排程法逐一處理這些任務,每個任務最多處理q ms 這個時間稱為時間片 如果q ms之後任務尚未處理完畢,那麼該任務 將被移動至隊伍最末尾,cpu隨即...