原理:
接上一回队列的问题,上节队列弹出之后再插入会报出数组越界。所以这节改成循环队列。
所谓循环队列就是删除到队尾后重新指向队头,插入数据满了之后重新指向队头,实现一个循环。
运行结果图:
可以看出弹出全部的数据后,是可以重新插入数据的。而且重新插入的数据是可以重新弹出的。因此这个循环队列是有效的!!!
下面甩出源代码,其实也就是在上节队列的基础上对于插入数据和删除数据进行一个判断。
public class MycycleQueue {
private int[] array; //底层数组
private int elements; //有效数据个数
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;
}
}