educoder数据结构循环队列

2023-07-02 07:10:00 来源 : haohaofanwen.com 投稿人 : admin

下面是好好范文网小编收集整理的educoder数据结构循环队列,仅供参考,欢迎大家阅读!

队列程序流程图

循环队列

数组队列的出队操作的复杂度是O(n),性能很差,解决方法就是使用循环队列(Loop Queue)

在循环队列中,需要对队为空和队为满的时候进行判断,为了区分队空和队满两个条件,需要浪费capacity一个空间,让rear指针一直指向一个空的位置;

当 rear= =front 时,队为空;

当 (rear+1)%n= =front (n为数字角标的最大值)时,队为满.

示意图如下:

循环队列实现

//循环队列publicclassArrayQueueLoop<E>implementsQueue<E>{private E data;privateint front;privateint rear;privateint size;//无参构造函数publicArrayQueueLoop        data=(EObject//因为有一个空的空间        front        rear        size//获取长度@OverridepublicintgetSizereturn size@OverridepublicbooleanisEmptyreturn size==0&&front==rear@Overridepublicvoidenqueue(E ereardata.length==front){resizedata.length        data[rear]=e;        rear=(reardata.length;        size@Overridepublic E dequeueisEmptyIllegalArgumentException        E ret=data[front];        front=(frontdata.length;        sizesize<=(data.length&&(data.lengthresize((data.lengthreturn ret;}//改变数组长度    privatevoidresize(int newLen){        E newData=(EObject[newLen p=front;int i            newData[i]=data[p];            i++;            p=(pdata.lengthp==rear        front        rear=size;        data=newData;}//获取队头元素@Overridepublic E getFrontisEmptyIllegalArgumentException("队列为空"return data[front//获取队尾元素@Overridepublic E getRearisEmptyIllegalArgumentException("队列为空"return data[(reardata.length)%data.length//清空队列@Overridepublic        data=(EObject//因为有一个空的空间        front        rear        size//自定义格式打印元素@Overridepublic String toString        StringBuilder sb=newStringBuilder        sb.append(String.format("ArrayQueueLoop: %d/%dn",size,data.length        sb.appendisEmpty            sb.append i=front;i!=rear;i=(idata.length){                sb.append(data[iidata.length==rear){                    sb.append                    sb.appendreturn sb.toString@Overridepublic Iterator<E>iteratorreturnnewArrayQueueLoopIteratorprivateclassArrayQueueLoopIteratorimplementsIterator{int p=front;@OverridepublicbooleanhasNextreturn p!=rear;}@Overridepublic Object             E ret=data[p];            p=(pdata.length;return ret


相关文章

专题分类