佇列的底層實現(陣列和環形陣列)

2021-09-25 01:49:43 字數 1531 閱讀 7969

佇列是乙個有序的列表,原則:先入先出

簡單陣列實現:front指向佇列頭的前乙個位置;rear指向佇列的最後乙個位置

front和rear的初始值都是-1;

//使用陣列模擬佇列--編寫乙個arrayqueue類

class arrayqueue

//判斷佇列是否為空

public boolean isempty()

//判斷佇列否未滿

public boolean isfull()

//像佇列中新增元素

public void addqueue(int n) else }

//佇列中取出元素

public int getqueue() else }

//遍歷佇列中的元素

public void showqueue()

for(int i=front+1;i<=rear;i++) }

//顯示佇列的頭元素

public int headqueue()

return array[front+1]; }

}

上述**實現的佇列存在問題:陣列只能使用一次,沒有達到復用的效果

使用陣列模擬環形佇列:1、front和rear調整:front指向對列的第乙個元素,rear指向佇列的最後乙個元素的後乙個位置會空出乙個空間為約定 front和rear的初始值都為0

2、隊列為空的條件 ; rear=front; 佇列滿:(rear+1)%maxsize=front;

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

這個具體分析可以看看資料結構的書。找個具體的例子畫畫圖家可以理解啦。。。

class circlearrayqueue

//判斷佇列是否為空

public boolean isempty()

//判斷佇列是否滿

public boolean isfull()

//獲取佇列中有效地資料個數

public int size()

//向佇列中新增元素

public void addqueue(int n)

array[rear]=n;

rear=(rear+1)%maxsize;

}//佇列中取出元素

public int getqueue() else

} //遍歷佇列中的元素

public void showqueue()

for(int i=front;i}

//顯示佇列的頭元素

public int headqueue()

return array[front];

} }

環形陣列例程

乙個簡單的環形陣列例程,參考了網路上的資源。define circlebuffer size 8 unsigned char circlebuffer circlebuffer size unsigned char writeindex 0 unsigned char readindex 0 uns...

環形陣列求最大子陣列和

陣列是環形的,即首尾相接 下標n 1的元素後面的元素下標為0 求最大子陣列和 環形陣列求最大子陣列和 解法一 把該環形陣列從某一點展開,連寫兩遍 複製乙份接到自己後面 然後當成無環的陣列求最大子陣列和,但這裡要限制乙個條件,就是最大子陣列的長度不可以超過n,所以求的時候要注意判斷。例如 上圖中展開寫...

環形陣列迴圈 210105

給定乙個含有正整數和負整數的環形陣列 nums。如果某個索引中的數 k 為正數,則向前移動 k 個索引。相反,如果是負數 k 則向後移動 k 個索引。因為陣列是環形的,所以可以假設最後乙個元素的下乙個元素是第乙個元素,而第乙個元素的前乙個元素是最後乙個元素。確定 nums 中是否存在迴圈 或週期 迴...