PHP--单链表的增删改查的实现

PHP--单链表的增删改查的实现:
<!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>单链表的实现</title></head>
<body>
  <h1>人物排行榜</h1>
<?php
class Person{
	public $no;
	public $name;
	public $next; 
    public function __construct($no='',$name=''){
 	
	$this->no=$no;
	$this->name=$name;
	$this->next=null;
}			
}
  $head=new Person();
  $p1=new Person(1, '张三');
  $p2=new Person(2, '李四');
  $head->next=$p1;
  $p1->next=$p2;
  //遍历所有节点
  function showChild($head){
  	$cur=$head;
  	while($cur->next!=null){
  		echo '编号为'.$cur->next->no.' 名字为 '.$cur->next->name.'</br>';
  		$cur=$cur->next;	
  	}  	
  }
  //增加孩子节点
  function addChild($head,$p){
  	$cur=$head;
  	//判断编号是否重复
  	
  	$flag=true; //标志位
  	while($cur->next!=null){
        if($cur->next->no>$p->no){
        	break;
        }else if($cur->next->no==$p->no){
        	$flag=false;
        	echo '对不起编号'.$p->no.'已经有人啦,返回吧!</br>';
        }
  		$cur=$cur->next;
  	}
  	if($flag==true){  	
    $p->next=$cur->next;
  	$cur->next=$p;
  	}	
  }
  //删除一个节点
  function deleteChild($head,$childno){
  	$cur=$head;
	$flag=false;
  	while($cur->next!=null){
		if($cur->next->no==$childno){
		$flag=true;
		break;
		}
  	    $cur=$cur->next;
  	}
	if($flag){

  	$cur->next=$cur->next->next;
		 
	}else{
		echo'没有找到你要删除的人物编号'.$childno.'</br>';
    }
 }

 //修改一个节点
  function updateChild($head,$p){
  	 $cur=$head;
  	 while($cur->next->no!=$p->no){
  	 	$cur=$cur->next;
  	 }
  	if($cur->next==null){
  		echo'对不起,不存在编号为'.$p->no.'的人物';
  		
  	}else{
  		$cur->next->name=$p->name;
  		
  	}
}
 	
 	//增加一个节点 
 	$p3=new Person(3,'王五');
 	addChild($head, $p3);
 	showChild($head);
    deleteChild($head, 13);
 	showChild($head);
 	echo '/////////</br>';
 	$p1=new Person(1,'陈一');
 	updateChild($head, $p1);
 	showChild($head);
 	echo '/////////</br>';
	$p5=new Person(1,'周二');
    showChild($head);
?>
</body>
</html>

你可能感兴趣的:(PHP,单链表)