zoukankan      html  css  js  c++  java
  • 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 SingleLinkList
    {
        private $header;
        public function __construct($id=null,$name=null)
        {
            $this->header=new Node($id,$name);
        }
    
        /**
         * 获取单链表的长度
         */
        public function getLinkLength(){
            $i = 0;
            $current = $this->header;
            while($current->next !=null){
                $i++;
                $current = $current->next;
            }
            return $i;
        }
    
        /**
         * 添加节点到单链表中(原理就是插入当前的节点的位置存储的下一个节点的信息,上一个节点存储当前节点的信息)
         * @param $node 节点
         */
        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;
        }
    
        /**
         * 删除节点(删除的节点的下一个位置保持在上一个节点中)
         * @param $id
         */
        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.'的信息';
            }
        }
    
        /**
         * 判断单链表是否为空
         * @return bool
         */
        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.',节点名称为'.$current->next->name.'<br/>';
                if($current->next->next == null){
                    break;
                }
                $current=$current->next;
            }
        }
    
        /**
         * 获取某个节点信息
         * @param $id
         * @return string
         */
        public function getLinkNameById($id){
            $current = $this->header;
            if($current->next==null){
                return '';
            }
    
            while($current->next != null){
                if($current->id == $id){
                    return $current->name;
                }
                $current=$current->next;
            }
        }
    
        /**
         * 更新某个节点名称
         * @param $id
         * @param $name
         */
        public function updateLink($id,$name){
            $current = $this->header;
            if($current->next==null){
                return '';
            }
    
            while($current->next != null){
                if($current->id == $id){
                    return $current->name=$name;
                }
                $current=$current->next;
            }
        }
    }
    
    header('Content-Type:text/html;charset=utf8');
    $lists = new SingleLinkList();
    
    $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 $lists->getLinkNameById ( 4 );
    echo "<br>-----------获取链表长度--------------<br>";
    echo $lists->getLinkLength ();
  • 相关阅读:
    hive函数之~字符串函数
    hive函数之~条件函数
    JSONP使用及注意事项小结
    css命名管理混乱?不妨试试BEM
    【移动端debug-6】如何做一个App里的web调试小工具
    ES6学习笔记(五):Class和Module
    ES6学习笔记(三):与迭代相关的新东东
    ES6学习笔记(四):异步操作
    ES6学习笔记(二):引用数据类型
    CORS跨域资源共享简述
  • 原文地址:https://www.cnblogs.com/qiandu/p/10382103.html
Copyright © 2011-2022 走看看