用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - php代码库

用php实现双向链表

2013-02-26 作者: 神马举报

[php]代码库

$n=10;//个数
class link{
 
    public $val;
    public $next=null;
    public $pre=null;
    static $num=0;
     
    //初始化
    function __construct($num)
    {
        $this->val=$num;
        self::$num++;//别忘记self是一般指向静态变量 静态方法的指针 而this则是初始化后指向对象的指针
    }
     
    //访问结点
    function read_link($val,$head)
    {
        $one=$head->next;
        while($one->val<$val &&   $one!=$head) {$one=$one->next;}
        if($one==$head) {echo 'not exist this node!';return;}
        return $one;
    }
     
    //对象个数
    function __get($num)
    {
        return self::$num;
    }
     
    //按照大小增加结点
    function add_link($val,$head)
    {
        $one=$head->next;
        while($one!=$head){
            if($one->val<$val)    {$one=$one->next;continue;}
            else if($one->val=$val){echo 'linknode is already exist!';return;}
            else if($one->val>$val) break;
        }
        $pre=$one->pre;
         
            $cur=new link($val);
            $pre->next=$cur;
            $one->pre=$cur;
            $cur->next=$one;
            $cur->pre=$pre;
         
        return $cur;
    }
    //删除该结点
    function delete_node($val,$head)
    {
        $one=$head->next;
        while($one!=$head) {
            if($one->val!=$val) {$one=$one->next;continue;}
            else break;
        }
        if($one==$head) {echo 'not exist linknode!';return;}
        else{
            $pre=$one->pre;
            $next=$one->next;
            $pre->next=$next;
            $next->pre=$pre;
            $one=new link(NULL);//引用变量值改变不影响被引用变量的值
            //unset($one);只是引用数减1 并不能删除
        }
        return $one;
    }
 
     
}
$head=new link(null);
for($i=1;$i<=$n;$i++)
{
    if(isset($cur)) $temp=$cur;//保存前一次cur
    if($i==1){
        $cur=new link($i);
        $head->next=$cur;
        $cur->pre=$head;
    }else if($i==$n){//最后一次则和头结点在一起
        $cur=new link($i);
        $temp->next=$cur;
        $cur->next=$head;
        $head->pre=$cur;
    }
    else{
        $cur=new link($i);
        $temp->next=$cur;
        $cur->pre=$temp;
    }
     
}
 
//var_dump($head->read_link(10,$head)->val);访问结点
 
//var_dump($head->add_link(10,$head));//增加结点
//var_dump($head->add_link(100,$head)->val);
 
//var_dump($head->delete_node(102,$head));//删除结点
//var_dump($head->delete_node(10,$head)->val);
//var_dump($head->read_link(10,$head)->val);
 
/* $a=1;
$b=$a; 
$b=NULL;
echo $a;//看来引用变量改变值的时候 两个变量就独立咯
//unset($b);
$a=NULL;var_dump($b);//看来变量有引用和被引用的关系
echo $a;
 */


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...