成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP版鏈表的實(shí)現(xiàn)

Jinkey / 1239人閱讀

摘要:本文首發(fā)于我的博客引用數(shù)據(jù)結(jié)構(gòu)與算法鏈表該文章提供的版的鏈表的實(shí)現(xiàn)。

本文首發(fā)于我的博客
引用:Java數(shù)據(jù)結(jié)構(gòu)與算法——鏈表

該文章提供的JAVA版的鏈表的實(shí)現(xiàn)。

現(xiàn)在我也貼一下PHP版的鏈表的實(shí)現(xiàn):

class Node {
    private $data;
    private $next;

    public function getData() {
        return $this->data;
    }

    public function setData($data) {
        $this->data = $data;
        return true;
    }

    public function getNext() {
        return $this->next;
    }

    public function setNext($next) {
        $this->next = $next;
        return true;
    }
}

/**
 * 鏈表類
 */
class Link {
    private $size = 0;
    private $first;
    private $last;

    /**
     * 獲取鏈表長(zhǎng)度
     */
    public function getLength() {
        return $this->size;
    }

    /**
     * 鏈表中插入第一個(gè)元素的時(shí)候,頭和尾部都是同一個(gè)元素
     */
    public function oneNode(string $element) {
        $this->first = new Node;
        $this->first->setData($element);
        $this->last = $this->first;
    }

    /**
     * 當(dāng)只有一個(gè)元素的時(shí)候,刪除$fist和$last
     */
    public function clear() {
        $this->first = $this->last = null;
    }
    
    /**
     * 頭節(jié)點(diǎn)插入
     */
    public function addHead(string $element) {
        if ($this->size == 0) {
            $this->oneNode($element);
        } else {
            $node = new Node;
            $node->setData($element);
            $node->setNext($this->first);
            $this->first = $node;
        }
        $this->size++;
        return true;
    }
    
    /**
     * 尾節(jié)點(diǎn)插入
     */
    public function addTail(string $element) {
        if ($this->size == 0) {
            $this->oneNode($element);
        } else {
            $node = new Node();
            $node->setData($element);
            $this->last->setNext($node);
            $this->last = $node;
        }

        $this->size++;
    }

    /**
     * 中間節(jié)點(diǎn)插入
     */
    public function add(int $index, string $element) {
        if ($index <= $this->size) {
            if ($this->size == 0) {
                oneNode($element);
            } elseif ($index == 0) {
                $this->addHead($element);
            } elseif ($index == $this->size) {
                $this->addTail($element);
            } else {
                $tmp = $this->get($index - 1);
                $node = new Node;
                $node->setData($element);
                $node->setNext($tmp->getNext());
                $tmp->setNext($node);
            }
            $this->size++;
        } else {
            throw new Exception("插入位置無(wú)效或超出鏈表長(zhǎng)度");
        }
    }
    
    /**
     * 獲取指定位置的元素
     */
    public function get(int $index) {
        $tmp = $this->first;
        for ($i = 0; $i < $index - 1; $i++) {
            $tmp = $tmp->getNext();
        }
        return $tmp;
    }

    /**
     * 刪除頭節(jié)點(diǎn)
     */
    public function deleteFirst() {
        if ($this->size == 0) {
            throw new Exception("空鏈表,無(wú)元素可刪除");
        } elseif ($this->size == 1) {
            $this->clear();
        } else {
            $tmp = $this->first;
            $this->first = $tmp->getNext();
            $this->size--;
        }
    }

    /**
     * 刪除尾節(jié)點(diǎn)
     */
    public function deleteLast() {
        if ($this->size == 0) {
            throw new Exception("空鏈表,無(wú)元素可刪除");
        } elseif ($this->size == 1) {
            $this->clear();
        } else {
            $tmp = $this->get($this->size - 1);
            $tmp->setNext(null);
            $this->size--;
        }
    }

    /**
     * 刪除指定節(jié)點(diǎn)
     */
    public function deleteIndex(int $index) {
        if ($this->size == 0) {
            throw new Exception("空鏈表,無(wú)元素可刪除");
        } elseif ($this->size == 1) {
            $this->clear();
        } else {
            $tmp = $this->get($index - 1);
            $tmp->setNext($tmp->getNext()->getNext());
            $this->size--;
        }

    }

    /**
     * 打印現(xiàn)有的所有元素
     */
    public function printLink() {
        $tmp = $this->first;
        if(is_null($tmp)) {
            return false;
        } 
        echo $tmp->getData();
        while(!is_null($tmp->getNext())) {
            $tmp = $tmp->getNext();
            echo "->" . $tmp->getData();
        }
        echo "
";
    }
}

$link = new Link();
$link->addHead("1");
$link->printLink(); // 1

$link->addHead("5");
$link->printLink(); // 5->1

$link->addTail("9");
$link->printLink(); // 5->1->9

$link->addTail("7");
$link->printLink(); // 5->1->9->7

$link->add(3, "8"); 
$link->printLink(); // 5->1->9->8->7

print_r("鏈表長(zhǎng)度:" . $link->getLength() . "
");

$link->deleteFirst();
$link->printLink();

$link->deleteLast();
$link->printLink();

$link->deleteIndex(1);
$link->printLink();

print_r("鏈表長(zhǎng)度:" . $link->getLength() . "
");

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28683.html

相關(guān)文章

  • PHP面試??贾?dāng)?shù)據(jù)結(jié)構(gòu)——鏈表的概念

    摘要:一鏈表鏈表是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會(huì)按線性的順序存儲(chǔ)數(shù)據(jù),而是在每一個(gè)節(jié)點(diǎn)里存到下一個(gè)節(jié)點(diǎn)的指針。指向整個(gè)列表的指針可以被稱作訪問(wèn)指針。 你好,是我琉憶,PHP程序員面試筆試系列圖書的作者。 本周(2019.3.18至3.22)的一三五更新的文章如下: 周一:PHP面試??贾?dāng)?shù)據(jù)結(jié)構(gòu)——鏈表的概念周三:PHP面試??贾?dāng)?shù)據(jù)結(jié)構(gòu)——棧和隊(duì)列周五:PHP面試??贾?..

    dreamans 評(píng)論0 收藏0
  • php底層原理之?dāng)?shù)組實(shí)現(xiàn)

    摘要:數(shù)組是最常用的數(shù)據(jù)類型,同時(shí)容易上手也得益于其強(qiáng)大的數(shù)組,但是數(shù)組在中是如何實(shí)現(xiàn)的呢首先,我們還是先了解下相關(guān)的數(shù)據(jù)結(jié)構(gòu),為下面的內(nèi)容打好基礎(chǔ)哈希表哈希表,顧名思義,即將不同的關(guān)鍵字映射到不同單元的一種數(shù)據(jù)結(jié)構(gòu)。 數(shù)組是PHPer最常用的數(shù)據(jù)類型,同時(shí)php容易上手也得益于其強(qiáng)大的數(shù)組,但是數(shù)組在php中是如何實(shí)現(xiàn)的呢? 首先,我們還是先了解下相關(guān)的數(shù)據(jù)結(jié)構(gòu),為下面的內(nèi)容打好基礎(chǔ) 哈希...

    HackerShell 評(píng)論0 收藏0
  • php中的哈希碰撞以及防御

    php中的哈希表 php中的變量是以符號(hào)表的方式進(jìn)行存儲(chǔ)的,實(shí)際上也是個(gè)HashTable,哈希表是通過(guò)特定的哈希算法將索引轉(zhuǎn)換成特定的index然后映射到對(duì)應(yīng)的槽中,然后采用拉鏈法,在一個(gè)槽中使用鏈表將數(shù)據(jù)進(jìn)行存儲(chǔ),鏈表的時(shí)間復(fù)雜度為O(n)。 php中的hashtable的結(jié)構(gòu)定義在Zend/zend_hash.h文件中: //保存數(shù)據(jù)的單鏈表結(jié)構(gòu) typedef struct bucket ...

    周國(guó)輝 評(píng)論0 收藏0
  • [數(shù)據(jù)結(jié)構(gòu)]鏈表的實(shí)現(xiàn)PHP

    開始對(duì)數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí) 今天寫代碼換了一個(gè)字體,以前一直用console很好看,今天發(fā)現(xiàn)一個(gè)更喜歡的風(fēng)格Source Code Pro上兩張圖,還是挺好看的?。?!showImg(https://segmentfault.com/img/remote/1460000014556516?w=414&h=441);showImg(https://segmentfault.com/img/remote/1...

    I_Am 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<