前面我們用陣列模擬了佇列,大家有沒有想過乙個問題。不斷的入隊當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隨即...