ホームページ > バックエンド開発 > PHPの問題 > PHPのリンクリストの実装方法

PHPのリンクリストの実装方法

藏色散人
リリース: 2023-03-06 21:32:02
オリジナル
2305 人が閲覧しました

PHP リンク リストの実装方法: 最初に PHP サンプル ファイルを作成し、次にヘッド ノードを初期化し、次にノードのデータを特定の位置に設定し、特定の位置にノードを挿入し、最後にノードを削除します。特定の位置にあるノード。

PHPのリンクリストの実装方法

推奨事項: 「PHP ビデオ チュートリアル

リンク リスト

リンク リスト (リンク リスト)一般的な基本データ構造は線形テーブルですが、データを線形順序で格納するのではなく、各ノードに次のノードへのポインタを格納します。

リンク リスト構造を使用すると、データ サイズを事前に知る必要があるという配列リンク リストの欠点を克服でき、コンピュータのメモリ空間を最大限に活用し、柔軟な動的メモリ管理を実現できます。 。しかし、リンクリストは配列のランダム読み取りの利点を失い、同時にノードのポインタフィールドの増加によりリンクリストのスペースオーバーヘッドが比較的大きくなります。

リンク リストには、一方向リンク リスト、二重リンク リスト、循環リンク リストなど、さまざまな種類があります。

単一リンク リスト

最も単純なタイプのリンク リストは、情報フィールドとポインタ フィールドの 2 つのフィールドを含む一方向リンク リストです。このリンクはリスト内の次のノードを指し、最後のノードは null 値を指します。

PHPのリンクリストの実装方法

#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;
    }
}
ログイン後にコピー

二重リンク リスト一より複雑なリンク リストは、「二重リンク リスト」または「両面リンク リスト」です。各ノードには 2 つの接続があります: 1 つは前のノードを指します (この「接続」が最初の「接続」の場合、null 値または空のリストを指します)。もう 1 つは次のノードを指します (この「接続」が最初の「接続」の場合)。 " は最初の "接続" であり、null 値または空のリストを指します); "それが最後の "接続" である場合、null 値または空のリストを指します)

PHPのリンクリストの実装方法

循環リンク リスト循環リンク リストでは、最初のノードと最後のノードが互いに接続されます。このメソッドは、一方向リンク リストと双方向リンク リストの両方で実装できます。循環リンク リストを変換するには、任意のノードから開始して、開始ノードに戻るまでいずれかの方向にリストに従います。別の方法で見ると、循環リンク リストは「頭なし、尾なし」とみなすことができます。このようなリストは、リスト内に 1 つのオブジェクトがあり、他のすべてのオブジェクトを不特定の配置で反復処理する必要がある場合に、データ ストレージ キャッシュを節約するのに役立ちます。 リスト全体へのポインタをアクセスポインタと呼ぶこともある。

PHPのリンクリストの実装方法
基本的なアイデアはほぼ完成しているので、更新を続ける時間があります

以上がPHPのリンクリストの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート