PHP如何通過帶尾指標的連結串列實現'佇列'
阿新 • • 發佈:2020-10-23
這篇文章是展示通過 PHP
語言實現一種帶 尾指標
的連結串列,然後通過連結串列來實現佇列,其中連結串列的頭元素 head
是用於列隊 出隊
的,它的時間複雜度 O(1)
,若在 head
的基礎上實現連結串列尾部 入隊
時間度為 O(n),為了降低入隊操作的時間複雜度,可以給連結串列維護一個帶有尾指標的變數 tail
,這樣每次入隊的時候直接操作 tail
,出隊的時候直接操作 head
,這樣可以使得 入隊
和 出隊
時間複雜度都是 O(1)。
1.output_queue_by_liked_list.php
這是一個演示列印輸出結果的檔案:
<?php require 'QueueByLinkedList.php'; $queue = new QueueByLinkedList(); $queue->enqueue("rr"); //入隊 $queue->enqueue("tt"); //入隊 $queue->enqueue("yy"); //入隊 $queue->enqueue("uu"); //入隊 $queue->enqueue("ii"); //入隊 $queue->enqueue("oo"); //入隊 echo $queue->toString(); //列印 rr->tt->yy->uu->ii->oo->null echo "<br>"; echo $queue->dequeue(); //出隊 列印 rr echo "<br>"; echo $queue->dequeue(); //出隊 列印 tt echo "<br>"; echo $queue->dequeue(); //出隊 列印 yy echo "<br>"; echo $queue->toString(); //列印 uu->ii->oo->null echo "<br>"; $queue->enqueue("11"); //入隊 $queue->enqueue("22"); //入隊 $queue->enqueue("33"); //入隊 $queue->enqueue("44"); //入隊 $queue->enqueue("55"); //入隊 $queue->enqueue("66"); //入隊 echo "<br>"; echo $queue->toString(); //列印 uu->ii->oo->11->22->33->44->55->66->null
2.QueueByLinkedList 類
這是通過帶尾指標連結串列實現的 佇列
類,它裡面有 入隊(enqueue)
方法和 出隊(dequque)
方法 :
<?php require 'Queue.php'; /** * 帶有尾指標的連結串列 * Class LinkedListTail */ class QueueByLinkedList implements Queue { private $head; //連結串列頭部 private $tail; //連結串列尾部 private $size; //連結串列大小 /** * 建構函式 初始化連結串列 * QueueByLinkedList constructor. */ public function __construct() { $this->head = null; $this->tail = null; $this->size = 0; } /** * 入隊操作 * @param $e */ public function enqueue($e): void { if ($this->tail == null) { $this->tail = $this->head = new Node($e,null); } else { $node = new Node($e,null); $this->tail->next = $node; $this->tail = $node; } $this->size++; } /** * 出隊操作 * @return mixed */ public function dequeue() { if ($this->size == 0) { return "佇列已經是空的"; } $node = $this->head; $this->head = $node->next; $this->size--; if ($node->next == null) { $this->tail = null; } return $node->e; } public function getFront() { if ($this->size == 0) { return "佇列已經是空的"; } return $this->head->e; } public function getSize() { return $this->size; } /** * 判斷佇列是否為空 * @return bool */ public function isEmpty(): bool { return $this->size == 0; } public function toString() { $str = ""; for ($node = $this->head; $node != null; $node = $node->next) { $str .= $node->e . "->"; } $str .= "null"; return $str; } } class Node { public $e;//節點元素 public $next; //下個節點資訊 /** * 建構函式 設定節點資訊 * Node constructor. * @param $e * @param $next */ public function __construct($e,$next) { $this->e = $e; $this->next = $next; } }
3.interface Queue
這裡是 佇列
類一個實現介面,裡面定義了一些函式,繼承它之後,必須重構裡面的所有方法:
<?php interface Queue { public function enqueue($e): void;//入隊 public function dequeue();//出隊 public function getFront();//獲取前端元素 public function getSize();//獲取佇列大小 public function isEmpty();//判斷佇列是否為空 }
以上就是PHP如何通過帶尾指標的連結串列實現'佇列'的詳細內容,更多關於PHP 實現佇列的資料請關注我們其它相關文章!