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

1.数据结构(PHP实现)——数组

时间:2023-03-30 03:44:42 PHP

说明:代码使用composer类自动加载,采用psr4命名规范。如果不使用,可以取消命名空间的定义。1.实现逻辑容量=$容量;$this->size=0;$this->data=[];}/***打印内容*@returnstring*/publicfunction__toString(){$result=sprintf('Array:size=%d,capacity=%d'.PHP_EOL,$this->size,$this->容量);$结果.='[';对于($i=0;$i<$this->size;$i++){$result.=$this->数据[$i];如果($i!=$this->size-1){$result.=',';}}$result.=']';返回$结果;}/***判断数组是否为空*@returnbool*/publicfunctionisEmpty():bool{return$this->size==0;}/***判断数组是否满*@returnbool*/publicfunctionisFull():bool{return$this->size==$this->capacity;}/***调整数组的容量*@paramfloat$ratio小于1则缩小,大于1则扩大*/publicfunctionresize(float$ratio):void{if($ratio>1){if($this->size<$this->capacity)返回;}elseif($ratio<1){if($this->size>$this->capacity/2)返回;}else{返回;}$this->capacity=$this->capacity*$ratio;}/***插入元素*@paramint$index插入索引*@parammixed$value插入值*@returnvoid*/publicfunctionadd(int$index,$value):void{//如果当前索引大于最大容量值,则返回if($index>$this->capacity)返回;//如果数组已满则展开if($this->isFull()){$this->resize(2);}for($i=$this->size-1;$i>=$index;$i--){$this->data[$i+1]=$this->data[$i];}//插入数组$this->data[$index]=$value;//返回;}/***在头部插入元素*@parammixed$value*@returnvoid*/publicfunctionaddFirst($value):void{$this->add(0,$value);}/***在末尾插入元素*@parammixed$value*@returnvoid*/publicfunctionaddLast($value):void{$this->add($this->size,$value);}/***删除元素*@paramint$index删除索引*@returnmixed*/publicfunctiondel(int$index){//判断是否为空或者索引是否在当前长度内if($this->isEmpty()||$index<0||$index>=$this->大小)返回空值;//获取删除的值$deleteValue=$this->data[$index];//将值前进一位,初始值为要删除的下标索引,直到结束for($i=$index;$i<$this->size-1;$i++){$this->data[$i]=$this->data[$i+1];}//将最后一位的值设置为null$this->data[$this->size-1]=null;$这个->大小--;$this->resize(0.5);返回$deleteValue;}/***更新指定字段*@paramint$index索引下标*@parammixed$value*@returnbool*/publicfunctionupdate(int$index,$value):bool{//判断是否为空或者索引是否在当前长度内if($this->isEmpty()||$this->size<=$index)returnfalse;如果($this->search($value)==-1)返回false;$this->data[$index]=$value;返回真;}/***替换值*@parammixed$searchValue查询值*@parammixed$newValue新值*/publicfunctionreplace($searchValue,$newValue):void{for($i=0;$i<$this->size;$i++){if($this->data[$i]==$searchValue){$this->data[$i]=$newValue;}}}/***按值查询Searchcause*@param$value*@returnint*/publicfunctionsearch($value):int{if($this->isEmpty())return-1;for($i=0;$i<$this->size;$i++){if($this->data[$i]==$value)返回$i;}返回-1;}/***获取参数*@paramint$index*@returnmixed*/publicfunctionget(int$index){if($index<0||$index>=$this->size)exit('Get错误!索引下标不能小于0或大于等于当前长度!');返回$this->data[$index];}/***获取第一个值*@returnmixed*/公共函数getFirst(){返回$this->get(0);}/***获取最后一个值*@returnmixed*/publicfunctiongetLast(){return$this->get($this->size-1);}}2。执行逻辑addLast('a');$array->addLast('b');$array->addLast('c');$array->addLast('d');$array->addLast('e');//从头插入3个元素$array->addFirst('z');$array->addFirst('z');$array->addFirst('z');//删除前3个元素$array->del(0);$array->del(0);$array->del(0);//打印结果回显$array;3.打印结果Array:size=5,capacity=8[a,b,c,d,e]