/**
* 队列:先进先出的特性
*/
package arithmetic;
public class Queue {
public static void main(String[] args) {
QueueX queuex = new QueueX(5);
queuex.insert(10);
queuex.insert(20);
queuex.insert(30);
queuex.insert(40);
queuex.remove();
queuex.remove();
queuex.remove();
queuex.insert(50);
queuex.insert(60);
queuex.insert(70);
queuex.insert(80);
while(!queuex.isEmpty()) {
long data = queuex.remove();
System.out.print(data);
System.out.print(" ");
}
}
}
/**
* 循环队列
* @author Administrator
*/
class QueueX{
private long[] dataArr;
private int front; //队头指针
private int rear; //队尾指针
private int items; //数据项
private int maxSize; //<span style="color:#009900;">记录当前已存在的数据项,来确保数据项始终不会因为循环添加数据项而覆盖原来未删除的数据项</span>
public QueueX(int size){
maxSize = size;
dataArr = new long[size];
front = 0;
rear = -1;
items = 0;
}
//插入
public void insert(long data){
if (!this.isFull()) //判断队列是否已满
if(rear == maxSize -1) //如果已经到了队尾,但数据项没有满,那就表明表头已经有数据项被移除,则让指针返回初始化位置
rear = -1;
dataArr[++rear] = data; //赋值数据项给当前位置
items++;
}
//移除
public long remove(){
long temp = dataArr[front++];
if(front == maxSize) //队头指针已经陆续移除数据项到队尾,则重新回归初始位置
front = 0;
items--;
return temp;
}
//查看
public long peek(){
return dataArr[front];
}
//是否为空
public boolean isEmpty(){
return (items == 0);
}
//是否已满
public boolean isFull(){
return (items == maxSize);
}
//当前数据项大小
public int size(){
return items;
}
}
队列之循环队列
最新推荐文章于 2024-03-31 09:41:56 发布