zoukankan      html  css  js  c++  java
  • PHP数据结构之实现单链表

    学习PHP中,学习完语法,开始尝试实现数据结构,今天实现单链表

    <?php
        class node    //节点的数据结构
        {
            public $id;
            public $name;
            public $next;
    
            public function __construct($id,$name)   //构造函数
            {
                $this->id=$id;
                $this->name=$name;
                $this->next=null;
            }
    
        }
    
        class linklist   //链表的数据结构
        {
            private $header;
    
            public function __construct()   //链表构造函数
            {
                $this->header=new node($id=null,$name=null);
            }
    
            public function add($node)  //向链表中添加节点的函数
            {
                $current=$this->header;
                while($current->next!=null)
                {
                    if($current->id>$node->id)
                        break;
                    else if($current->next==$node->id)
                    {
                        exit('already exist!');
                    }
                    $current=$current->next;
    
                }
                $node->next=$current->next;
                $current->next=$node;
            }
    
            public function del($id)    //在链表中删除一个节点
            {
                $current=$this->header;
                $flag=false;
                while($current->next!=null)
                {
                    if($current->next->id==$id)
                    {
                        $flag=true;
                        break;
                    }
                    $current=$current->next;
                }
                if($flag)
                    $current->next=$current->next->next;
                else
                    echo "can not find the node which id=".$id;
            }
    
            public function getlength() //获取链表的长度
            {
                $current=$this->header;
                $i=0;
                while($current->next!=null)
                {
                    $i++;
                    $current=$current->next;
                }
                return $i;
            }
    
            public function getlist()   //获取整个链表
            {
                $current=$this->header;
                if($current->next==null)
                {
                    echo "empty list";  //空表
                    return;
                }
                while($current->next!=null)
                {
                    echo "id=".$current->next->id." , "."name=".$current->next->name."<br>";
                    if($current->next->next==null)
                        break;
                    $current=$current->next;
                }
            }
    
            public function update($id,$name)   //更新表
            {
                $current=$this->header;
                if($current->next==null)
                    exit("empty list");
                while($current->next!=null)
                {
                    if($current->id==$id)
                        break;
                    $current=$current->next;
    
                }
                return $current->name=$name;
            }
    
        }
    
    
        $list=new linklist();   //构造一个表
        $list->add(new node(1,'aaa'));
        $list->add(new node(2,'bbb'));
        $list->add(new node(3,'ccc'));
        $list->add(new node(4,'ddd'));
        $list->add(new node(5,'eee'));
        $list->add(new node(6,'fff'));
        $list->add(new node(7,'ggg'));
        $list->add(new node(8,'hhh'));
        $list->add(new node(9,'iii'));
    
        $list->getlist();
        echo"<br/> the length is ".$list->getlength()."<br/>";
        echo"测试删除节点<br/>";
        $list->del('8');
        $list->getlist();
        echo"测试更新节点<br/>";
        $list->update('9','AAA');
        $list->getlist();
    
    ?>
    

      



    输出结果为:
       
               id=1 , name=aaa
         id=2 , name=bbb
         id=3 , name=ccc
         id=4 , name=ddd
         id=5 , name=eee
         id=6 , name=fff
         id=7 , name=ggg
         id=8 , name=hhh
         id=9 , name=iii
     
        the length is 9   
         测试删除节点
        id=1 , name=aaa
        id=2 , name=bbb   
              id=3 , name=ccc
        id=4 , name=ddd
        id=5 , name=eee
        id=6 , name=fff
        id=7 , name=ggg
        id=9 , name=iii
      测试更新节点
        id=1 , name=aaa
        id=2 , name=bbb
        id=3 , name=ccc
        id=4 , name=ddd
        id=5 , name=eee
        id=6 , name=fff
        id=7 , name=ggg
        id=9 , name=AAA
           
     
    
    
    

      

    
    
  • 相关阅读:
    UVALive
    训练指南 UVA
    训练指南 UVALive
    Codeforces Round #535 (Div. 3)
    训练指南 UVALive
    训练指南 UVALive
    Codeforces Round #534 (Div. 2)
    Codeforces Round #532 (Div. 2)
    《算法问题实战策略》——chaper9——动态规划法技巧
    《训练指南》——8.3
  • 原文地址:https://www.cnblogs.com/coderchuanyu/p/3833767.html
Copyright © 2011-2022 走看看