温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php如何实现单链表

发布时间:2021-02-23 09:48:54 阅读:187 作者:清风 栏目:编程语言
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本文将为大家详细介绍“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$namenull ); 
    } 
 
    //获取链表长度 
    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 "的节点!<br>"; 
        } 
    }
 
    //判断连表是否为空
    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 . "<br>"; 
            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 "<br>-----------删除节点--------------<br>"$lists->delLink 5 ); 
$lists->getLinkList ();
echo "<br>-----------更新节点名称--------------<br>"$lists->updateLink 3"222222" ); 
$lists->getLinkList ();
echo "<br>-----------获取节点名称--------------<br>"echo $lists->getLinkNameById 5 );
echo "<br>-----------获取链表长度--------------<br>"echo $lists->getLinkLength ();

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

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI

开发者交流群×