zoukankan      html  css  js  c++  java
  • 链表

    链表

    标签(空格分隔): 数据结构和算法

    理解链表

    链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址
    

    undefined
    undefined
    undefined
    undefined

    PHP实现单链表

        <?php
    
    class Node
    {
        /**
         * 数据
         * @var $value
         */
        public $value;
    
        /**
         * 指向下一个节点
         * @var $next
         */
        public $next;
    
    
        public function __construct($value = null, $next = null)
        {
            $this->value = $value;
            $this->next = $next;
        }
    }
    
    class LinkedList
    {
        /**
         * Node节点
         * @var Node $head
         */
        private $head;
    
        /**
         * 数量
         * @var int $size
         */
        private $size;
    
        public function __construct()
        {
            $this->head = new Node();
            $this->size = 0;
        }
    
        /**
         * 头部插入数据
         * @param $value
         */
        public function addByHead($value)
        {
            $this->head->next = new Node($value, $this->head->next);
            $this->size++;
        }
    
    
        /**
         * 尾部插入数据
         * @param $value
         */
        public function addByTail($value)
        {
            $node = $this->head;
            while ($node->next != null) {
                $node = $node->next;
            }
            $node->next = new Node($value);
            $this->size++;
        }
    
        /**
         * 指定位置后插入
         * @param $indexValue
         * @param $value
         * @return bool
         */
        public function addByIndex($indexValue, $value)
        {
            $node = $this->head;
            while ($node->next != null) {
                $node = $node->next;
                if ($node->value == $indexValue) {
                    $node->next = new Node($value, $node->next);
                    return true;
                }
            }
            return false;
        }
    
    
        /**
         * 更新节点的值
         * @param $oldValue
         * @param $newValue
         * @return bool
         */
        public function update($oldValue, $newValue)
        {
            $node = $this->head;
    
            while ($node->next != null) {
                $node = $node->next;
                if ($node->value == $oldValue) {
                    $node->value = $newValue;
                    return true;
                }
            }
            return false;
        }
    
    
        /**
         * 移除节点
         * @param $value
         * @return bool
         */
        public function remove($value)
        {
            $node = $this->head;
    
    //        $flag = null;
    //        while ($node->next != null) {
    //            $node = $node->next;
    //            if ($node->value != $value) {
    //                $flag = $node;
    //            } else {
    //                break;
    //            }
    //        }
    //        var_dump($flag);die;
    
            while ($node->next != null && $node->next->value != $value) {
                $node = $node->next;
            }
            if ($node) {
                $node->next = $node->next->next;
                return true;
            }
            return false;
        }
    
    
        /**
         * 清空
         * @return bool
         */
        public function clear()
        {
            $this->head = null;
            $this->size = 0;
            return true;
        }
    
    
        /**
         * 是否为空
         * @return bool
         */
        public function isEmpty()
        {
            return (boolean) $this->getSize();
        }
    
    
    
        /**
         * @return string
         */
        public function toString()
        {
            $node = $this->head;
            $r = [];
            while($node->next != null){
                $node = $node->next;
                $r[] = $node->value;
            }
            return implode('->',$r);
        }
    
        /**
         * @return int
         */
        public function getSize(): int
        {
            return ($this->size);
        }
    }
    
    $linkedList = new LinkedList();
    var_dump($linkedList->isEmpty());
    $linkedList->addByTail("hello-one");
    $linkedList->addByTail("hello-two");
    $linkedList->addByTail("hello-three");
    $linkedList->addByTail("hello-for");
    $linkedList->addByTail("hello-five");
    $linkedList->addByHead("hello-six");
    $linkedList->addByHead("hello-seven");
    $linkedList->addByHead("hello-eight");
    $linkedList->addByIndex("hello-six", "hello**world");
    
    
    $linkedList->update("hello**world", "PHP");
    
    $linkedList->remove("hello-one");
    $linkedList->remove("hello-two");
    
    var_dump($linkedList->getSize());
    
    var_dump($linkedList->toString());
    var_dump($linkedList->isEmpty());
  • 相关阅读:
    第四节 哈希类型
    第三节 string类型
    第二节 redis的数据类型和一些通用的键命令
    第一节 Redis的安装配置
    第三十二节 定时器
    第三十一节 sed命令
    第三十节 awk命令
    第二十九节 cut命令
    第二十八节 函数和脚本调试
    Gartner 如何看 RASP 和 WAF?
  • 原文地址:https://www.cnblogs.com/yanweifeng/p/12810229.html
Copyright © 2011-2022 走看看