java 数组实现队列_JAVA-循环数组实现简单的队列

本文介绍了一个使用Java编写的环形数组队列(Circular Array Queue),探讨了其构造、插入、删除操作以及搜索功能。它适用于需要高效处理先进先出(FIFO)数据流的场景,如消息队列或缓存。队列支持动态扩容,避免了数组溢出问题。
摘要由CSDN通过智能技术生成

public class CircularArrayQueue

{

private int[] elements;

private int head;

private int tail;

//初始化队列

public CircularArrayQueue(int initialCapacity) {

elements = new int[initialCapacity];

}

//进队列,按照队列先进先出原则,从队尾插入,e为插入的数值,队列满或操作失败抛异常IllegalStateException。

public boolean add(int e) throws IllegalStateException

{

boolean isFull = tail>head && (tail-head)%elements.length==0;

boolean isReachMaxInt = tail > elements.length && tail==Integer.MAX_VALUE;

boolean isAdded = false;

if(! isFull )

{

elements[tail%elements.length]=e;

if( isReachMaxInt )

{

tail = tail%elements.length;

head = head%elements.length;

}

tail++;

isAdded= true;

}

else

{

isAdded =false;

throw new IllegalStateException();

}

return isAdded;

}

//出队列,按照队列的先进先出原则,对头先出,队列为空或操作失败抛异常NoSuchElementException。

public int remove() throws NoSuchElementException

{

boolean isEmpty = tail==head;

int result=0;

if(! isEmpty)

{

result=elements[head%elements.length];

head++;

}

else

{

throw new NoSuchElementException();

}

return result;

}

//获取队列头数值,队列不变化

public int getQueueHeadElement() throws NoSuchElementException

{

int result = 0;

if(tail>head)

{

result=elements[head%elements.length];

}

else

{

throw new NoSuchElementException();

}

return result;

}

//获取队列尾数值,队列不变化

public int getQueueTailElement() throws NoSuchElementException

{

int result = 0;

if(tail>head)

{

result=elements[tail%elements.length-1];

}

else

{

throw new NoSuchElementException();

}

return result;

}

//获取队列长度

public int size()

{

return tail-head;

}

//查找数值value在队列中是否存在,如果存在返回true,否则返回false。

public boolean search(int value)

{

boolean isExist= false;

if(tail>head)

{

for(int index=head;index

{

if(value==elements[index%elements.length])

{

isExist=true;

break;

}

}

}

return isExist;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值