循环队列 java_循环队列(java实现)

package com.fcy.dataStruct;

import java.util.Arrays;

class LoopQueue{

private int DEFAULT_SIZE=10;

//保存数组的长度

private int capacity;

//定义一个数组用于保存循环队列的元素

private Object[] elementData;

//保存循环队列中元素的当前个数

private int front=0;

private int rear=0;

//以默认数组长度创建空循环队列

public LoopQueue(){

capacity=DEFAULT_SIZE;

elementData=new Object[capacity];

}

//以一个初始化元素来创建循环队列

public LoopQueue(T element){

this();

elementData[0]=element;

rear++;

}

//以指定长度的数组来创建循环队列

public LoopQueue(T element,int initSize){

this.capacity=initSize;

elementData=new Object[capacity];

elementData[0]=element;

rear++;

}

//获取循环队列的大小

public int length(){

if(empty()){

return 0;

}

return rear>front ? rear-front:capacity-(front -rear);

}

//插入队列

public void add(T element){

if(rear==front && elementData[front]!=null){

throw new IndexOutOfBoundsException("队列已满!");

}

elementData[rear++]=element;

//如果rear到头,就转头

rear=rear==capacity? 0:rear;

}

//移出队列

@SuppressWarnings("unchecked")

public T remove(){

if(empty()){

throw new IndexOutOfBoundsException("队列已空!");

}

//保留队列的front端元素的值

T oldValue=(T)elementData[front];

//释放队列的front端元素

elementData[front++]=null;

//如果front已经到头,那就转头

front=front== capacity ? 0:front;

return oldValue;

}

//返回队列顶元素,但不删除队列顶元素

@SuppressWarnings("unchecked")

public T element(){

if(empty()){

throw new IndexOutOfBoundsException("队列已空!");

}

return (T)elementData[front];

}

//判断循环队列是否为空

public boolean empty(){

//rear==front且rear处元素为null

return rear==front&&elementData[rear]==null;

}

//清空循环队列

public void clear(){

Arrays.fill(elementData, null);

front=0;

rear=0;

}

public String toString(){

if(empty()){

return "[]";

}else{

//如果front

if(front

StringBuilder sb=new StringBuilder("[");

for(int i=front;i

sb.append(elementData[i].toString()+",");

}

int len=sb.length();

return sb.delete(len-1, len).append("]").toString();

}else{ //如果front>=rear,那么有效元素为front->capacity之间和0->front之间的元素

StringBuilder sb=new StringBuilder("[");

for(int i=front;i

sb.append(elementData[i].toString()+",");

}

for(int i=0;i

sb.append(elementData[i].toString()+",");

}

int len=sb.length();

return sb.delete(len-1, len).append("]").toString();

}

}

}

}

public class LoopQueueTest {

public static void main(String[] args) {

LoopQueue queue=new LoopQueue("aaaa",3);

queue.add("bbbb");

queue.add("cccc");

System.out.println(queue);

queue.remove();

System.out.println("删除一个元素后的队列:"+queue);

queue.add("dddd");

System.out.println(queue);

System.out.println("队列满时的长度:"+queue.length());

queue.remove();

queue.add("eeee");

System.out.println(queue);

}

}

运行结果:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值