中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php 鏈表的實現方法

發布時間:2020-11-02 09:38:45 來源:億速云 閱讀:178 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關php 鏈表的實現方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

php鏈表的實現方法:首先創建PHP示例文件;然后初始化頭節點;接著設置某位置節點的數據,并在某位置處插入節點;最后實現刪除某位置的節點即可。

鏈表

鏈表(Linked list)是一種常見的基礎數據結構,是一種線性表,但是并不會按線性的順序存儲數據,而是在每一個節點里存到下一個節點的指針(Pointer)。

使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由于增加了結點的指針域,空間開銷比較大。

鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。

單向鏈表

鏈表中最簡單的一種是單向鏈表,它包含兩個域,一個信息域和一個指針域。這個鏈接指向列表中的下一個節點,而最后一個節點則指向一個空值。

PHP實現簡單的單向鏈表

<?php

class Node
{
    private $Data;//節點數據
    private $Next;//存儲下個點對象

    public function __construct($data, $next)
    {        $this->Data = $data;        $this->Next = $next;
    }

    public function __set($name, $value)
    {        if (isset($this->$name))            $this->$name = $value;
    }

    public function __get($name)
    {        if (isset($this->$name))            return $this->$name;        else
            return NULL;
    }
}

class LinkList
{
    private $head;//頭節點
    private $len;

    /**
     * 初始化頭節點
     */
    public function __construct()
    {        $this->init();
    }

    public function setHead(Node $val)
    {        $this->head = $val;
    }

    public function getHead()
    {        return $this->head;
    }

    public function getLen()
    {        return $this->len;
    }

    public function init()
    {        $this->setHead(new Node(NULL, NULL));        $this->len = 0;
    }

    /**
     * 設置某位置節點的數據
     * @param int $index
     * @param $data
     * @return bool
     */
    public function set(int $index, $data)
    {        $i = 1;        $node = $this->getHead();        while ($node->Next !== NULL && $i <= $index) {            $node = $node->Next;            $i++;
        }        $node->Data = $data;        return TRUE;
    }

    /**
     * 獲取某位置節點的數據
     * @param int $index
     * @return mixed
     */
    public function get(int $index)
    {        $i = 1;        $node = $this->getHead();        while ($node->Next !== NULL && $i <= $index) {            $node = $node->Next;            $i++;
        }        return $node->Data;
    }

    /**
     * 在某位置處插入節點
     * @param $data
     * @param int $index
     * @return bool
     */
    public function insert($data, int $index = 0)
    {        if ($index <= 0 || $index > $this->getLen())            return FALSE;        $i = 1;        $node = $this->getHead();        while ($node->Next !== NULL) {            if ($index === $i) break;            $node = $node->Next;            $i++;
        }        $node->Next = new Node($data, $node->Next);        $this->len++;        return TRUE;
    }

    /**
     * 刪除某位置的節點
     * @param int $index
     * @return bool
     */
    public function delete(int $index)
    {        if ($index <= 0 || $index > $this->getLen())            return FALSE;        $i = 1;        $node = $this->getHead();        while ($node->Next !== NULL) {            if ($index === $i) break;            $node = $node->Next;            $i++;
        }        $node->Next = $node->Next->Next;        $this->len--;        return TRUE;
    }
}

雙向鏈表一種更復雜的鏈表是“雙向鏈表”或“雙面鏈表”。每個節點有兩個連接:一個指向前一個節點,(當此“連接”為第一個“連接”時,指向空值或者空列表);而另一個指向下一個節點,(當此“連接”為最后一個“連接”時,指向空值或者空列表)

循環鏈表在一個 循環鏈表中,首節點和末節點被連接在一起。這種方式在單向和雙向鏈表中皆可實現。要轉換一個循環鏈表,你開始于任意一個節點然后沿著列表的任一方向直到返回開始的節點。再來看另一種方法,循環鏈表可以被視為“無頭無尾”。這種列表很利于節約數據存儲緩存,假定你在一個列表中有一個對象并且希望所有其他對象迭代在一個非特殊的排列下。 指向整個列表的指針可以被稱作訪問指針。

基本思路都差不多有時間繼續更新

關于php 鏈表的實現方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

呼和浩特市| 钟祥市| 奉贤区| 金昌市| 望奎县| 彩票| 神木县| 壤塘县| 饶平县| 仪陇县| 比如县| 滨州市| 延川县| 铜陵市| 射洪县| 梨树县| 清流县| 班戈县| 渭源县| 孝义市| 无锡市| 江西省| 晴隆县| 留坝县| 曲松县| 广东省| 大渡口区| 元氏县| 新和县| 正定县| 深州市| 高阳县| 家居| 礼泉县| 射洪县| 江西省| 湟源县| 隆回县| 香河县| 南溪县| 大洼县|