当前位置: 首页 > 后端技术 > PHP

我理解的数据结构(三)——队列(Queue)

时间:2023-03-29 20:10:24 PHP

我所理解的数据结构(三)——队列(Queue)1.队列队列是一个线性结构。与数组相比,队列对应的操作是数组的子集只能从一端(队尾)添加元素,而只能从另一端(队头)的元素队列进行先进先出数据结构(先进先出)二、数组队列和循环队列1、数组队列你会发现自己封装一个数组队列是那么的轻松愉快!(1)先定义一个接口,接口定义了队列需要实现的方法publicinterfaceQueue{intgetSize();布尔isEmpty();//查看队列的第一个元素EgetFront();//入队voidenqueue(Eele);//DequeueEdequeue();}(2)实现数组队列publicclassArrayQueueimplementsQueue{//这里的数组在上一篇文章中进行了封装,直接拿来使用即可privateArrayNew数组;publicArrayQueue(intcapacity){array=newArrayNew<>(capacity);}publicArrayQueue(){这个(10);}publicintgetCapacity(){返回数组。获取容量();}@OverridepublicintgetSize(){returnarray.getSize();}@OverridepublicbooleanisEmpty(){returnarray.isEmpty();}@OverridepublicEgetFront(){returnarray.getFirst();}@Overridepublicvoidenqueue(Eele){array.addLast(ele);}@OverridepublicEdequeue(){returnarray.removeFirst();}@OverridepublicStringtoString(){StringBufferres=newStringBuffer();res.append(String.format("arrayQueue:size=%d,capacity=%d\n",getSize(),getCapacity()));res.append("前面[");对于(inti=0;i实现Queue{私有E[]数组;私有整数大小;私人前线;私人尾巴;publicLoopQueue(intcapacity){//我们需要浪费一个空间来判断队列是否已满,所以我们需要放入capacity+1array=(E[])newObject[capacity+1];前=0;尾巴=0;大小=0;}publicLoopQueue(){这个(10);}//返回用户传递的队列大小publicintgetCapacity(){returnarray.length-1;}@OverridepublicintgetSize(){返回大小;}@OverridepublicbooleanisEmpty(){returnfront==tail;}@OverridepublicEgetFront(){if(isEmpty()){thrownewIllegalArgumentException("Queueisempty.Can'tgetfront.");}返回数组[0];}@Overridepublicvoidenqueue(Eele){if(front==(tail+1)%array.length){//扩展队列的长度是原来长度的2倍resize(getCapacity()*2);}数组[尾巴]=ele;尺码++;tail=(tail+1)%array.length;}@OverridepublicEdequeue(){if(isEmpty()){//队列为空thrownewIllegalArgumentException("Queueisempty.Can'tgetdequeue.");}Eele=array[front];尺寸-;数组[前面]=null;front=(front+1)%array.length;if(size==getCapacity()/4&&getCapacity()/2!=0){resize(getCapacity()/2);}返回元素;}privatevoidresize(intnewCapacity){E[]newArray=(E[])newObject[newCapacity+1];for(inti=0;iq,intopCount){//纳秒长startTime=System.nanoTime();随机random=newRandom();对于(inti=0;iaq=newArrayQueue<>();doubletime1=test(aq,opCount);System.out.println(time1);LoopQueuelq=newLoopQueue<>();d双倍时间2=测试(lq,opCount);System.out.println(time2);(3)结果是14.6359951130.054536447这就是算法和数据结构的力量!