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

数据结构-PHP通过 Array 类对象实现 '队列'

时间:2023-03-29 18:21:56 PHP

数据结构-PHP通过Array对象实现'queue'操作,是Array的一个子集。只能从一端(尾)添加元素,只能从另一端(头)取出元素。它是一种先进先出(FIFO)结构。1.ArrayStructclasscapacity=$capacity;}/***获取数组元素个数*@returnint*/publicfunctiongetSize():int{return$this->size;}/***获取数组的容量*@returnint*/publicfunctiongetCapacity():int{return$this->capacity;}/***判断数组是否为空*@returnbool*/publicfunctionisEmpty():bool{return$this->size==0;}/***向数组的指定位置插入一个元素*@paramint$index*@param$e*@throwsException*/publicfunctionadd(int$index,$e):void{if($this->size==$this->capacity){$this->resize(2);//扩大到原来大小的2倍}if($index<0||$index>$this->size){echo"添加的位置超出了数组的大小";出口;}//为了便于理解,[1,2,4,5,6],假设$index=3;$e=100,插入[1,2,4,100,5,6]for($i=$this->size;$i>=$index;$i--){$this->data[$i]=$this->data[$i-1];}$this->data[$index]=$e;$这个->尺寸++;}/***添加元素到数组的末尾*@param$e*@throwsException*/publicfunctionaddLast($e):void{$this->add($this->size,$e);}/***在数组的开头插入一个元素*@param$e*@throwsException*/publicfunctionaddFirst($e):void{$this->add(0,$e);}/***获取索引位置数组元素*@paramint$index*@returnmixed*/publicfunctionget(int$index){if($index<0||$index>$this->size){echo"索引值超出元素的位置范围,";出口;}返回$this->data[$index];}/***获取数组的最后一个元素*@returnmixed*/publicfunctiongetLast(){return$this->get($this->size-1);}/***获取数组的起始元素*@returnmixed*/publicfunctiongetFirst(){return$this->get(0);}/***判断数组中是否存在一个元素*@param$e*@returnbool*/publicfunctioncontains($e):bool{for($i=1;$i<$this->size;$i++){if($this->data[$i]==$e){返回真;}}返回假;}/***检查数组中某个元素的位置索引值,如果不存在则返回-1*@param$e*@returnint*/publicfunctionfind($e):int{for($i=0;$i<$this->size;$i++){if($this->data[$i]==$e){返回$i;}}返回-1;}/***删除数组指定位置的元素,并返回删除元素的值*@param$index*@returnmixed*/publicfunctionremove($index){if($index<0||$index>$this->size){echo"索引值超出元素的位置范围,";出口;$e=$this->data[$index];对于($i=$index;$i<$this->size-1;$i++){$this->data[$i]=$this->data[$i+1];}$this->大小--;$this->data[$this->size]=null;//游荡的物体!=memory/**如果当前数组大小小于容量的一半,重新分配一半的数组空间**/if($this->size<=$this->capacity/4&&$this->capacity%2==0){$this->resize(0.5);}返回$e;}/***删除数组开头的元素,返回删除元素的值*/publicfunctionremoveFirst(){return$this->remove(0);}/***删除数组第一个元素,返回删除元素的值*/publicfunctionremoveLast(){return$this->remove($this->size-1);}/***删除数组中的特定元素*@param$e*/publicfunctionremoveElement($e){for($i=0;$i<$this->大小;$i++){如果($this->data[$i]==$e){$this->remove($i);$this->removeElement($e);休息;}}}/***数组扩容,如果是其他语言,比如JAVA,这里需要重新开空间*@param$factor*/protectedfunctionresize($factor){$this->capacity=$factor*$这个->能力;}/***将数组转换为字符串*@returnstring*/publicfunctiontoString():string{$str="[";对于($i=0;$i<$this->size;$i++){$value_str=is_numeric($this->data[$i])?$this->data[$i]:"'{$this->data[$i]}'";$str.=$i.“=>”。$value_str。",";}$str=trim($str,",");$str.="]";返回$str;}}Tips:这是一个封装好的数组类,可用于数组的插入、删除、查找2.QueueStruct类这里是一个队列类,继承数组类的方法,实现入队(enqueue)、出队(dequeue)、查队头(getFront):array=newArrayStruct($capacity);}/***Enqueue*@param$e*@throwsException*/publicfunctionenqueue($e):void{$this->array->addLast($e);}/***出队*/publicfunctiondequeue(){return$this->array->removeFirst();}/***获取队列的前端元素*/publicfunctiongetFront(){return$this->array->getFirst();}/***获取队列大小*@returnint*/publicfunctiongetSize():int{return$this->array->getSize();}/***判断队列是否为空*@returnbool*/publicfunctionisEmpty():bool{return$this->array->isEmpty();}/***打印队列内容*@returnbool*/publicfunctiontoString():string{return$this->array->toString();}}3.interfaceQueue这里是queue类的一个实现接口,里面定义了一些函数,所以QueueStrcut继承之后,里面的所有方法都要重构:enqueue("rr");$queue->enqueue("tt");$queue->enqueue("yy");$queue->enqueue("uu");$queue->enqueue("ii");$queue->enqueue("oo");echo$queue->toString();//print[0=>'rr',1=>'tt',2=>'yy',3=>'uu',4=>'ii',5=>'oo']echo"
";echo$queue->dequeue();//打印出rrecho"
";echo$queue->dequeue();//打印出ttecho"
";代码仓库:https://gitee.com/love-for-po...扫描二维码关注爱因世贤