ホームページ >バックエンド開発 >PHPチュートリアル >PHPキューとスタックのデータ構造実装の詳細説明

PHPキューとスタックのデータ構造実装の詳細説明

WBOY
WBOYオリジナル
2024-05-07 09:42:01388ブラウズ

キューは「先入れ先出し」の原則に従い、配列またはリンク リストを使用して実装できます。スタックは「後入れ先出し」の原則に従い、配列またはリンク リストを使用して実装することもできます。具体的な実装方法には、キュー配列の実装、キュー リンク リストの実装、スタック配列の実装、およびスタック リンク リストの実装が含まれます。実際のケースでは、メッセージの印刷と配列の反転におけるキューとスタックの適用を示します。

PHP 队列和堆栈的数据结构实现详解

PHPキューとスタックのデータ構造実装の詳しい説明

キューとスタックは一般的な線形データ構造です。それらは独特の特性を持ち、さまざまな用途に広く使用されています。この記事では、PHP でのキューとスタックのデータ構造の実装を紹介し、実践的なケースを示します。

キュー

キューは、「先入れ先出し」(FIFO) の原則に従います。キュー内に挿入された最も古い要素が最初に削除されます。キューは配列またはリンク リストを使用して実装できます。

配列の実装:

class Queue
{
    private $queue = [];

    public function enqueue($item)
    {
        $this->queue[] = $item;
    }

    public function dequeue()
    {
        if (empty($this->queue)) {
            throw new Exception("Queue is empty");
        }
        return array_shift($this->queue);
    }
}

リンクリストの実装:

class Node
{
    public $data;
    public $next;

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

class Queue
{
    private $head;
    private $tail;

    public function enqueue($item)
    {
        $node = new Node($item);
        if (empty($this->head)) {
            $this->head = $node;
            $this->tail = $node;
        } else {
            $this->tail->next = $node;
            $this->tail = $node;
        }
    }

    public function dequeue()
    {
        if (empty($this->head)) {
            throw new Exception("Queue is empty");
        }
        $item = $this->head->data;
        $this->head = $this->head->next;
        if (empty($this->head)) {
            $this->tail = null;
        }
        return $item;
    }
}

実際のケース: キューを使用してメッセージを出力する

$queue = new Queue();
$queue->enqueue("Hello");
$queue->enqueue("World");
while (!$queue->isEmpty()) {
    echo $queue->dequeue() . "<br>";
}

スタック

スタックは「後入れ先出し」(LIFO) 原則に従います。 。スタック内で最後に挿入された要素が最初に削除されます。スタックは、配列またはリンク リストを使用して実装できます。

配列の実装:

class Stack
{
    private $stack = [];

    public function push($item)
    {
        $this->stack[] = $item;
    }

    public function pop()
    {
        if (empty($this->stack)) {
            throw new Exception("Stack is empty");
        }
        return array_pop($this->stack);
    }
}

リンクリストの実装:

class Node
{
    public $data;
    public $next;

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

class Stack
{
    private $top;

    public function push($item)
    {
        $node = new Node($item);
        $node->next = $this->top;
        $this->top = $node;
    }

    public function pop()
    {
        if (empty($this->top)) {
            throw new Exception("Stack is empty");
        }
        $item = $this->top->data;
        $this->top = $this->top->next;
        return $item;
    }
}

実際のケース: スタックを使用して配列を反転する

$stack = new Stack();
$array = [1, 2, 3, 4, 5];
foreach ($array as $item) {
    $stack->push($item);
}
$reversedArray = [];
while (!$stack->isEmpty()) {
    $reversedArray[] = $stack->pop();
}
print_r($reversedArray);

以上がPHPキューとスタックのデータ構造実装の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。