九 、循環隊列的java實現
阿新 • • 發佈:2018-02-22
pub 一個 gpo rem val 越界 pty log -- private int font ; //隊頭
private int end ; //隊尾
public MycycleQueue() {
// TODO Auto-generated constructor stub
array = new int[5];
elements =0;
font = 0;
end =0;
}
public MycycleQueue(int Maxsize) //重載構造
{
array = new int[Maxsize];
elements =0;
font = 0;
end =0;
}
public void insert(int value) //插入數據
{
if(end == array.length)
end = 0;
array[end++] =value;
elements++;
}
public int remove() //刪除數據
{
if(font == array.length)
font =0;
elements--;
return array[font++];
}
public void peek() //查看隊頭數據
{
System.out.println(array[font]);
}
public boolean IsEmpty() //判斷是否為空
{
return elements ==0;
}
public boolean IsFull() //判斷是否為滿
{
return elements == array.length;
}
}
原理:
接上一回隊列的問題,上節隊列彈出之後再插入會報出數組越界。所以這節改成循環隊列。
所謂循環隊列就是刪除到隊尾後重新指向隊頭,插入數據滿了之後重新指向隊頭,實現一個循環。
運行結果圖:
可以看出彈出全部的數據後,是可以重新插入數據的。而且重新插入的數據是可以重新彈出的。因此這個循環隊列是有效的!!!
下面甩出源代碼,其實也就是在上節隊列的基礎上對於插入數據和刪除數據進行一個判斷。
public class MycycleQueue {
private int[] array; //底層數組
private int elements; //有效數據個數
private int end ; //隊尾
public MycycleQueue() {
// TODO Auto-generated constructor stub
array = new int[5];
elements =0;
font = 0;
end =0;
}
public MycycleQueue(int Maxsize) //重載構造
{
array = new int[Maxsize];
elements =0;
end =0;
}
public void insert(int value) //插入數據
{
if(end == array.length)
end = 0;
array[end++] =value;
elements++;
}
public int remove() //刪除數據
{
if(font == array.length)
font =0;
elements--;
return array[font++];
public void peek() //查看隊頭數據
{
System.out.println(array[font]);
}
public boolean IsEmpty() //判斷是否為空
{
return elements ==0;
}
public boolean IsFull() //判斷是否為滿
{
return elements == array.length;
}
}
九 、循環隊列的java實現