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

数据结构-PHP通过Array类对象实现“栈”

时间:2023-03-30 01:00:30 PHP

操作是Array的子??集,只能从一端添加元素,只能从一端取出元素。它是一种后进先出(LIFO),即后进先出结构。Stack的应用有很多,比如'撤销操作(undo)','程序调用系统栈'。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]f后或($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);}/***判断数组中是否存在一个元素*@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->size--;$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->size;$i++){如果($this->data[$i]==$e){$this->remove($i);$this->removeElement($e);休息;}}}/***数组扩展,如果是其他语言,比如JAVA,需要在这里开辟空间*@param$factor*/protectedfunctionresize($factor){$this->capacity=$factor*$this->容量;}/***将数组转换为字符串*@returnstring*/publicfunctiontoString():string{$str="[";foreach($this->dataas$value){$str.=$value.",";}$str=trim($str,",");$str.="]";返回$str;}}Tips:这是一个封装了数组的类,可以用于数组的插入、删除、查找2.StackStructclassarray=newArrayStruct($capacity);}/***获取堆栈大小*@returnint*/publicfunctiongetSize():int{return$this->array->getSize();}/***判断栈是否为空*@returnbool*/publicfunctionisEmpty():bool{return$this->array->isEmpty();}/***元素被压入栈中*/publicfunctionpush($e):void{$this->array->addLast($e);}/***出栈*@returnmixed*/publicfunctionpop(){return$this->array->removeLast();}/***查看栈顶元素*@returnmixed*/publicfunctionpeek(){return$this->array->getLast();}/***将堆栈数组转换为字符串*@returnstring*/publicfunctiontoString():string{returnrtrim($this->array->toString(),"]");}}尖端:这是一个Stack类,通过继承Array类实现了Stack的基本功能3.interfaceStackpush('aa');$stack->push('bb');$stack->push('cc');$stack->push('dd');$stack->push('ee');$stack->push('ff');$stack->push('gg');$stack->push('hh');echo$stack->偷看();//查看栈顶元素,打印hhecho$stack->toString();//打印堆栈数据[aa,bb,cc,dd,ee,ff,gg,hhecho$stack->pop();//出栈,打印hhecho$stack->toString();//打印栈数据[aa,bb,cc,dd,ee,ff,gg代码仓库:https://gitee.com/love-for-po...扫描二维码关注爱因世贤