• PHP实现链表


    看了很久数据结构但是没有怎么用过,在网上看到了关于PHP的数据结构,学习了一下,与大家一起分享一下。

    简短不割                                                                                     

    class Hero
    {
        public $no;//排名
        public $name;//名字
        public $next=null;//$next是一个引用,指向另外一个Hero的对象实例
        
        public function __construct($no='',$name='')
        {
            $this->no=$no;
            $this->name=$name;
        }
        
        static public function showList($head)
        {
            $cur = $head;
            while($cur->next!=null)
            {
                echo "排名:".$cur->next->no.",名字:".$cur->next->name."<br>";
                $cur = $cur->next;
            }
        }
        //普通插入
        static public function addHero($head,$hero)
        {
            $cur = $head;
            while($cur->next!=null)
            {
                $cur = $cur->next;
            }
            $cur->next=$hero;
        }
        //有序的链表的插入  
        static public function addHeroSorted($head,$hero)
        {
            $cur = $head;
            $addNo = $hero->no;
            while($cur->next->no <= $addNo)
            {
                $cur = $cur->next;
            }
            /*$tep = new Hero();
            $tep = $cur->next;
            $cur->next = $hero;
            $hero->next =$tep;*/
            $hero->next=$cur->next;
            $cur->next=$hero;
        }
        
        static public function deleteHero($head,$no)
        {
            $cur = $head;
            while($cur->next->no != $no && $cur->next!= null)
            {
                $cur = $cur->next;
            }
            if($cur->next->no != null)
            {
                $cur->next = $cur->next->next;
                echo "删除成功<br>"; 
            }
            else
            {
                echo "没有找到<br>"; 
            }
        }
        
        static public function updateHero($head,$hero)
        {
            $cur = $head;
            while($cur->next->no != $hero->no && $cur->next!= null)
            {
                $cur = $cur->next;
            }
            if($cur->next->no != null)
            {
                $hero->next = $cur->next->next;
                $cur->next = $hero;
                echo "更改成功<br>"; 
            }
            else
            {
                echo "没有找到<br>"; 
            }
        }
    }
    
    //创建head头
    $head = new Hero();
    //第一个
    $hero = new Hero(1,'111');
    //连接
    $head->next = $hero;
    //第二个
    $hero2 = new Hero(3,'333');
    //连接
    Hero::addHero($head,$hero2);
    $hero3 = new Hero(2,'222');
    Hero::addHeroSorted($head,$hero3);
    //显示
    Hero::showlist($head);
    //删除
    Hero::deleteHero($head,4);
    //显示
    Hero::showlist($head);
    //更改
    $hero4=new Hero(2,'xxx');
    Hero::updateHero($head,$hero4);
    //显示
    Hero::showlist($head);

    我是天王盖地虎的分割线                                                                

    有序的插入的话需要遍历一遍链表,链表的一些知识就不介绍了哈。这里主要分享一下代码。

    转载请注明出处:http://www.cnblogs.com/yydcdut

  • 相关阅读:
    旧题复习{6}
    CF219D. Choosing Capital for Treeland [树形DP]
    POJ1947 Rebuilding Roads[树形背包]

    洛谷P1280 尼克的任务[DP]
    NOIP2003pj栈[卡特兰数]
    NOIP2001统计单词个数[序列DP]
    洛谷P1415 拆分数列[序列DP 状态 打印]
    POJ2828 Buy Tickets[树状数组第k小值 倒序]
    CF380C. Sereja and Brackets[线段树 区间合并]
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3777760.html
Copyright © 2020-2023  润新知