国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

實(shí)戰(zhàn)PHP數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)之單鏈表

xumenger / 2864人閱讀

摘要:常見操作對(duì)單鏈表我們常見的操作有如下語(yǔ)言實(shí)現(xiàn)首先我們根據(jù)定義實(shí)現(xiàn)一個(gè)類。單鏈表是鏈表這種鏈?zhǔn)酱嫒?shù)據(jù)結(jié)構(gòu)中基礎(chǔ)的部分,同樣屬于鏈表結(jié)構(gòu)的還有雙鏈表,環(huán)形鏈表和多鏈表。專題系列基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)專題系列目錄地址主要使用語(yǔ)法總結(jié)基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)和算法。

什么是鏈表?

鏈表由一個(gè)一個(gè)的作為節(jié)點(diǎn)的對(duì)象構(gòu)成的,每一個(gè)節(jié)點(diǎn)都有指向下一個(gè)節(jié)點(diǎn)的指針,最后一個(gè)節(jié)點(diǎn)的指針域指向空。每個(gè)節(jié)點(diǎn)可以存儲(chǔ)任何數(shù)據(jù)類型。

常見操作

對(duì)單鏈表我們常見的操作有如下:

insert

insertBefore

insertAfter

insertAtFirst

search

deleteFirst

deleteLast

delete

reverse

getNthNode

...

PHP語(yǔ)言實(shí)現(xiàn)

首先我們根據(jù)定義實(shí)現(xiàn)一個(gè)ListNode類。

class ListNode
{
    private $data;
    private $next;

    public function __construct(string $data)
    {
        $this->data = $data;
    }

    public function __get($var)
    {
        return $this->$var;
    }

    public function __set($var, $val)
    {
        return $this->$var = $val;
    }
}

再來(lái)看鏈表類,首先需要2個(gè)私有屬性,分別是頭節(jié)點(diǎn)和長(zhǎng)度。

class LinkedList
{
    private $head;
    private $length;
}

下面我們長(zhǎng)話短說(shuō),直接看如何實(shí)現(xiàn)第一個(gè)即常用的插入,這是是一個(gè)平均時(shí)間復(fù)雜度為O(n)的操作。

/**
 * 插入一個(gè)節(jié)點(diǎn)
 * @param string|null $data
 * @return bool
 * complexity O(n)
 */
public function insert(string $data = null)
{
    $newNode = new ListNode($data);

    if ($this->head === null) {
        $this->head = &$newNode;
    } else {
        $currentNode = $this->head;
        while ($currentNode->next !== null) {
            $currentNode = $currentNode->next;
        }

        $currentNode->next = $newNode;
    }

    $this->length++;
    return true;
}

再來(lái)看搜索,同樣是一個(gè)平均時(shí)間復(fù)雜度為O(n)的操作。

/**
 * 搜索一個(gè)節(jié)點(diǎn)
 * @param string $data
 * @return bool|ListNode
 * complexity O(n)
 */
public function search(string $data)
{
    if ($this->length > 0) {
        $currentNode = $this->head;
        while ($currentNode !== null) {
            if ($currentNode->data === $data) {
                return $currentNode;
            }

            $currentNode = $currentNode->next;
        }
    }

    return false;
}

反轉(zhuǎn)單鏈表

public function reverse()
{
    if ($this->head !== null) {
        if ($this->head->next !== null) {
            $reveredList = null;
            $next = null;
            $currentNode = $this->head;

            while ($currentNode !== null) {
                $next = $currentNode->next;
                $currentNode->next = $reveredList;
                $reveredList = $currentNode;
                $currentNode = $next;
            }

            $this->head = $reveredList;
        }
    }

}

單鏈表其他操作的詳細(xì)實(shí)現(xiàn)可以參考 這里。

單鏈表是鏈表這種鏈?zhǔn)酱嫒?shù)據(jù)結(jié)構(gòu)中基礎(chǔ)的部分,同樣屬于鏈表結(jié)構(gòu)的還有雙鏈表,環(huán)形鏈表和多鏈表。

專題系列

PHP基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)專題系列目錄地址:https://github.com/... 主要使用PHP語(yǔ)法總結(jié)基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)和算法。還有我們?nèi)粘HP開發(fā)中容易忽略的基礎(chǔ)知識(shí)和現(xiàn)代PHP開發(fā)中關(guān)于規(guī)范、部署、優(yōu)化的一些實(shí)戰(zhàn)性建議,同時(shí)還有對(duì)Javascript語(yǔ)言特點(diǎn)的深入研究。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/28795.html

相關(guān)文章

  • 實(shí)戰(zhàn)PHP數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)雙鏈

    摘要:什么是雙鏈表上一篇實(shí)戰(zhàn)數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)之單鏈表說(shuō)到單鏈表由一個(gè)一個(gè)的作為節(jié)點(diǎn)的對(duì)象構(gòu)成的,每一個(gè)節(jié)點(diǎn)都有指向下一個(gè)節(jié)點(diǎn)的指針,最后一個(gè)節(jié)點(diǎn)的指針域指向空。 什么是雙鏈表? 上一篇實(shí)戰(zhàn)PHP數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)之單鏈表說(shuō)到 單鏈表由一個(gè)一個(gè)的作為節(jié)點(diǎn)的對(duì)象構(gòu)成的,每一個(gè)節(jié)點(diǎn)都有指向下一個(gè)節(jié)點(diǎn)的指針,最后一個(gè)節(jié)點(diǎn)的指針域指向空。每個(gè)節(jié)點(diǎn)可以存儲(chǔ)任何數(shù)據(jù)類型。 而雙鏈表每個(gè)節(jié)點(diǎn)有兩個(gè)指針域,分別指向前驅(qū)...

    Michael_Lin 評(píng)論0 收藏0
  • PHPer也刷《劍指Offer》

    摘要:劍指中鏈表相關(guān)題目俗話說(shuō)光說(shuō)不練假把式,既然學(xué)習(xí)了鏈表的基礎(chǔ)概念和基本操作那我們一定要找些題目鞏固下,下面來(lái)看劍指中的相關(guān)題目。題目分析合并兩個(gè)排序的鏈表,需要分別比較兩個(gè)鏈表的每個(gè)值,然后改變指針。 溫故知新 鏈表由一個(gè)一個(gè)的作為節(jié)點(diǎn)的對(duì)象構(gòu)成的,每一個(gè)節(jié)點(diǎn)都有指向下一個(gè)節(jié)點(diǎn)的指針,最后一個(gè)節(jié)點(diǎn)的指針域指向空。每個(gè)節(jié)點(diǎn)可以存儲(chǔ)任何數(shù)據(jù)類型。 根據(jù)類型可以分為單鏈表、雙鏈表、環(huán)形鏈表、...

    daydream 評(píng)論0 收藏0
  • [個(gè)人心得]數(shù)據(jù)結(jié)構(gòu)單鏈

    摘要:一個(gè)單向鏈表包含兩個(gè)值當(dāng)前節(jié)點(diǎn)的值和一個(gè)指向下一個(gè)節(jié)點(diǎn)的鏈接。為退出循環(huán)即已到了最后一個(gè)節(jié)點(diǎn)那么它的為加入節(jié)點(diǎn)后,要把單鏈表長(zhǎng)度加一。第個(gè)節(jié)點(diǎn)是運(yùn)行結(jié)果個(gè)人源碼地址單鏈表就寫到這里咯,接下來(lái)還會(huì)寫其他的數(shù)據(jù)結(jié)構(gòu)本人也在學(xué)習(xí)當(dāng)中。 維基百科 鏈表是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會(huì)按線性的順序存儲(chǔ)數(shù)據(jù),而是在每一個(gè)節(jié)點(diǎn)里存到下一個(gè)節(jié)點(diǎn)的指針。 鏈表中最簡(jiǎn)單的一種是單向鏈...

    bingchen 評(píng)論0 收藏0
  • 圖解幾種常見的線性

    摘要:下面來(lái)看一下,有哪些數(shù)據(jù)結(jié)構(gòu)屬于線性表吧棧特性先進(jìn)后出只有唯一的一個(gè)出入口介紹棧又名堆棧,它是一種運(yùn)算受限的線性表。 原文是在我自己博客中,小伙伴也可以點(diǎn)閱讀原文進(jìn)行跳轉(zhuǎn)查看,還有好聽的背景音樂(lè)噢背景音樂(lè)已取消~ 2333333 線性表 什么是線性表?就是一種連續(xù)或間斷存儲(chǔ)的數(shù)組,這里的連續(xù)和間斷是針對(duì)物理內(nèi)存空間中線性表元素之間是否連續(xù),其中連續(xù)數(shù)組對(duì)應(yīng)內(nèi)置數(shù)組的實(shí)現(xiàn)方式,間斷數(shù)組對(duì)...

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

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

0條評(píng)論

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