PHP實現雙向鏈表

看了好久數據結構可是沒有怎麼用過,在網上看到了關於PHP的數據結構,學習了一下,與你們一塊兒分享一下。上一次分享了鏈表,此次來補充說一下雙向鏈表。php

簡短不割                                                                                                                                 html

<?php
        class Hero
        {
            public $pre=null;
            public $no;
            public $name;
            public $next=null;
            
            public function __construct($no='',$name='')
            {
                $this->no=$no;
                $this->name=$name;
            }
            
            static public function addHero($head,$hero)
            {
                $cur = $head;
                $isExist=false;
                //判斷目前這個鏈表是否爲空
                if($cur->next==null)
                {
                    $cur->next=$hero;
                    $hero->pre=$cur;
                }
                else
                {
                    //若是不是空節點,則安排名來添加
                    //找到添加的位置
                    
                    while($cur->next!=null)
                    {
                        if($cur->next->no > $hero->no)
                        {
                            break;
                        }
                        else if($cur->next->no == $hero->no)
                        {
                            $isExist=true;
                            echo "<br>不能添加相同的編號";
                        }
                        $cur=$cur->next;
                    }
                    if(!$isExist)
                    {
                        if($cur->next!=null)
                        {
                            $hero->next=$cur->next;
                        }
                        $hero->pre=$cur;
                        if($cur->next!=null)
                        {
                            $hero->next->pre=$hero;
                        }
                        $cur->next=$hero;                    
                    }
                }
            }
            
            //遍歷
            static public function showHero($head)
            {
                $cur=$head;
                while($cur->next!=null)
                {
                    echo "<br>編號:".$cur->next->no."名字:".$cur->next->name;
                    $cur=$cur->next;
                }
            }
            
            static public function delHero($head,$herono)
            {
                $cur=$head;
                $isFind=false;
                while($cur!=null)
                {
                    if($cur->no==$herono)
                    {
                        $isFind=true;
                        break;
                    }
                    //繼續找
                    $cur=$cur->next;
                }
                if($isFind)
                {
                    if($cur->next!=null)
                    {
                        $cur->next_pre=$cur->pre;
                    }
                    $cur->pre->next=$cur->next;
                }
                else
                {
                    echo "<br>沒有找到目標";
                }                
            }
        }

        $head = new Hero();
        $hero1 = new Hero(1,'1111');
        $hero3 = new Hero(3,'3333');
        $hero2 = new Hero(2,'2222');
        Hero::addHero($head,$hero1);
        Hero::addHero($head,$hero3);
        Hero::addHero($head,$hero2);
        Hero::showHero($head);
        Hero::delHero($head,2);
        Hero::showHero($head);
?>

我是天王蓋地虎的分割線                                                                 數據結構

《PHP實現鏈表》傳送門:http://www.cnblogs.com/yydcdut/p/3777760.html學習

 

 

 

轉載請註明出處:http://www.cnblogs.com/yydcdutthis

相關文章
相關標籤/搜索