PHP如何?雙向鏈表並排序

來源:互聯網
上載者:User
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。

<?php/**  * 雙向鏈表實現使用者熱門排行榜 * * 僅用於體現思想邏輯,不具備實際參考價值 * @author 瘋狂老司機 * @date 2016-07-07 */  class Rank{      /**     * @var 指向前一個節點的引用     */    public $pre = null;    /**     * @var 指向後一個節點的引用     */    public $next = null;    /**     * @var 使用者排行id     */    public $id;    /**     * @var 使用者名稱稱     */    public $username;          public function __construct($id = '', $username = ''){        $this->id = $id;        $this->username = $username;    }    /**     * 新增成員節點方法     *     * @access public     * @param obj head 初始節點     * @param obj rank 成員節點     */    public static function addRank($head, $rank){        $cur = $head; // 輔助節點        $isExist = false; //這是一個標誌位        while($cur->next != null){             if($cur->next->id > $rank->id){                break;            }else if($cur->next->id == $rank->id){                $isExist = true;                echo'<br/>不能添加相同的id';              }              $cur = $cur->next;          }          if(!$isExist){             if($cur->next != null){                  $rank->next = $cur->next;              }              $rank->pre = $cur;              if($cur->next != null){                  $cur->next->pre = $rank;              }              $cur->next = $rank;          }      }      /**     * 刪除成員節點方法     *     * @access public     * @param obj head 初始節點     * @param obj rankid 使用者排行id     */    public static function delRank($head, $rankid){          $cur = $head->next;        $isFind = flase; // 標記位        while($cur != null){            if($cur->id == $rankid){                $isFind = true;                break;            }            $cur = $cur->next;        }          if($isFind){            if($cur->next != null){                $cur->next->pre = $cur->pre;            }            $cur->pre->next = $cur->next;            echo '<br/>要刪除的成員id是'.$cur->id;        }else{            echo'<br/>要刪除的成員沒有';        }    }    /**     * 遍曆所有節點並輸出顯示     *     * @access public     * @param obj head 初始節點     */    public static function showRank($head){        $cur = $head->next; // 不列印空節點        while($cur->next != null){            echo'<br/>id='.$cur->id.'  '.'username='.$cur->username;            $cur = $cur->next;        }        echo'<br/>id='.$cur->id.'  '.'username='.$cur->username;      }  }  //建立一個初始節點$head=new Rank();//建立一個成員$rank=new Rank(1,'老王');Rank::addRank($head,$rank);$rank=new Rank(2,'小明');Rank::addRank($head,$rank);$rank=new Rank(6,'大熊');Rank::addRank($head,$rank);$rank=new Rank(3,'靜香');Rank::addRank($head,$rank);$rank=new Rank(56,'孫二娘');Rank::addRank($head,$rank);echo '<br/>成員熱門排行榜.....';Rank::showRank($head);echo'<br/>';echo '<br/>刪除後的成員熱門排行榜.....';Rank::delRank($head,3);Rank::showRank($head);echo'<br/>';echo'<br/>下面測試刪除最前面的和最後面的成員<br/>';echo '<br/>刪除後的成員熱門排行榜.....';Rank::delRank($head,1);Rank::showRank($head); echo'<br/>';echo '<br/>刪除後的成員熱門排行榜.....';Rank::delRank($head,56);Rank::showRank($head);?>

後面會介紹PHP內部實現的雙向鏈表,有興趣的可以關注瞭解。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.