php如何实现单链表

本文将为大家详细介绍“php如何实现单链表”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“php如何实现单链表”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知识吧。

创新互联建站专注于肥城企业网站建设,成都响应式网站建设公司,成都商城网站开发。肥城网站建设公司,为肥城等地区提供建站服务。全流程按需制作,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务

php实现单链表的方法:首先写出链表节点的类;然后在链表中还定义两个方法,分别是插入和删除;接着获取链表长度并添加节点数据;最后获取节点名字并进行删除或更新操作即可。

用PHP实现的单链表

单链表顾名思义就是一个链式数据结构,它有一个表头,并且除了最后一个节点外,所有节点都有其后继节点。如下图。

首先,我们写出链表节点的类。单链表中的每一个节点,都保存其数据域和后驱指针

//链表节点 
class node { 
    public $id; //节点id 
    public $name; //节点名称 
    public $next; //下一节点 
   
    public function __construct($id, $name) { 
        $this->id = $id; 
        $this->name = $name; 
        $this->next = null; 
    } 
}

链表中还有两个特别重要的方法,插入和删除。插入需要找到插入的位置,把前一个元素的next指针指向被插入的节点,并将被插入节点的next指针指向后一个节点,如下图左侧所示。而删除则是把前一个节点的next指针指向后一个节点,并返回被删除元素的数据内容,如下图右侧所示。

//单链表 
class singelLinkList { 
    private $header; //链表头节点 
   
    //构造方法 
    public function __construct($id = null, $name = null) { 
        $this->header = new node ( $id, $name, null ); 
    } 
 
    //获取链表长度 
    public function getLinkLength() { 
        $i = 0; 
        $current = $this->header; 
        while ( $current->next != null ) { 
            $i ++; 
            $current = $current->next; 
        } 
        return $i; 
    } 
 
    //添加节点数据 
    public function addLink($node) { 
        $current = $this->header; 
        while ( $current->next != null ) { 
            if ($current->next->id > $node->id) { 
                break; 
            } 
            $current = $current->next; 
        } 
        $node->next = $current->next; 
        $current->next = $node; 
    } 
 
    //删除链表节点 
    public function delLink($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 "未找到id=" . $id . "的节点!
";          }      }       //判断连表是否为空     public function isEmpty(){             return $this->header == null;     }       //清空链表     public function clear(){             $this->header = null;     }        //获取链表      public function getLinkList() {          $current = $this->header;          if ($current->next == null) {              echo ("链表为空!");              return;          }          while ( $current->next != null ) {              echo 'id:' . $current->next->id . '   name:' . $current->next->name . "
";              if ($current->next->next == null) {                  break;              }              $current = $current->next;          }      }        //获取节点名字      public function getLinkNameById($id) {          $current = $this->header;          if ($current->next == null) {              echo "链表为空!";              return;          }          while ( $current->next != null ) {              if ($current->id == $id) {                  break;              }              $current = $current->next;          }          return $current->name;      }        //更新节点名称      public function updateLink($id, $name) {          $current = $this->header;          if ($current->next == null) {              echo "链表为空!";              return;          }          while ( $current->next != null ) {              if ($current->id == $id) {                  break;              }              $current = $current->next;          }          return $current->name = $name;      }  } $lists = new singelLinkList ();  $lists->addLink ( new node ( 5, 'eeeeee' ) );  $lists->addLink ( new node ( 1, 'aaaaaa' ) );  $lists->addLink ( new node ( 6, 'ffffff' ) );  $lists->addLink ( new node ( 4, 'dddddd' ) );  $lists->addLink ( new node ( 3, 'cccccc' ) );  $lists->addLink ( new node ( 2, 'bbbbbb' ) );  $lists->getLinkList ();  echo "
-----------删除节点--------------
";  $lists->delLink ( 5 );  $lists->getLinkList (); echo "
-----------更新节点名称--------------
";  $lists->updateLink ( 3, "222222" );  $lists->getLinkList (); echo "
-----------获取节点名称--------------
";  echo $lists->getLinkNameById ( 5 ); echo "
-----------获取链表长度--------------
";  echo $lists->getLinkLength ();

如果你能读到这里,小编希望你对“php如何实现单链表”这一关键问题有了从实践层面最深刻的体会,具体使用情况还需要大家自己动手实践使用过才能领会,如果想阅读更多相关内容的文章,欢迎关注创新互联行业资讯频道!


分享题目:php如何实现单链表
标题来源:http://hbruida.cn/article/gphiog.html