鑰匙要點
- 抽像數據類型(ADT)是由可以在其上執行的一組操作來定義的。堆棧和隊列是日常用法中起源的基本ADT。在計算機科學中,堆棧是一個順序集合,其中最後放置的對像是第一個刪除(lifo),而隊列則以先入為先的,首先為基礎(FIFO)進行操作。 >可以使用數組實現堆棧,因為它們已經提供了推動和彈出操作。定義堆棧的基本操作包括init(創建堆棧),按下(在頂部添加一個項目),pop(刪除最後一個項目),頂部(查看頂部的項目而不刪除它)和Isempty(返回堆棧是否不包含項目)。
- > PHP中的SPL擴展提供了一組標準數據結構,包括Splstack類。以雙關聯列表實現的Splstack類提供了實現可遍歷堆棧的能力。將其實現的閱讀清單類可以穿越堆棧前向(自上而下)和向後(自下而上)。 排隊的另一種抽像數據類型是以先入為先的(FIFO)為基礎的。定義隊列的基本操作包括init(創建隊列),構建(將項目添加到末端),decqueue(從前面刪除項目)和Isempty(返回隊列是否不再包含項目)。 PHP中的Splqueue類(也使用雙關聯列表都實現)允許實現隊列。
- stacks 通常,堆棧是一堆通常以層次排列的物體 - 例如,桌子上的一堆書籍或學校自助餐廳中的一堆托盤。在計算機科學的說法中,堆棧是一個具有特定屬性的順序集合,因為將其放在堆棧上的最後一個對象將是第一個對象。此屬性通常稱為
在第一個或lifo中的最後一次。糖果,芯片和香煙自動售貨機以相同的原則運行;首先將加載在機架中的最後一個物品被分配。 從抽象的術語中,堆棧是一個線性列表,其中所有添加(“推”)和(“ pop”)列表中的所有添加列表都僅限於一端- 定義為“ top”(堆棧的“ top”) ) 。定義堆棧的基本操作是:
init - 創建堆棧。<span><span><?php </span></span><span><span>class ReadingList </span></span><span><span>{ </span></span><span> <span>protected $stack; </span></span><span> <span>protected $limit; </span></span><span> </span><span> <span>public function __construct($limit = 10) { </span></span><span> <span>// initialize the stack </span></span><span> <span>$this->stack = array(); </span></span><span> <span>// stack can only contain this many items </span></span><span> <span>$this->limit = $limit; </span></span><span> <span>} </span></span><span> </span><span> <span>public function push($item) { </span></span><span> <span>// trap for stack overflow </span></span><span> <span>if (count($this->stack) limit) { </span></span><span> <span>// prepend item to the start of the array </span></span><span> <span>array_unshift($this->stack, $item); </span></span><span> <span>} else { </span></span><span> <span>throw new RunTimeException('Stack is full!'); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>public function pop() { </span></span><span> <span>if ($this->isEmpty()) { </span></span><span> <span>// trap for stack underflow </span></span><span> <span>throw new RunTimeException('Stack is empty!'); </span></span><span> <span>} else { </span></span><span> <span>// pop item from the start of the array </span></span><span> <span>return array_shift($this->stack); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>public function top() { </span></span><span> <span>return current($this->stack); </span></span><span> <span>} </span></span><span> </span><span> <span>public function isEmpty() { </span></span><span> <span>return empty($this->stack); </span></span><span> <span>} </span></span><span><span>}</span></span></span>讓我們看看堆棧頂部是什麼:
<span><span><?php </span></span><span><span>$myBooks = new ReadingList(); </span></span><span> </span><span><span>$myBooks->push('A Dream of Spring'); </span></span><span><span>$myBooks->push('The Winds of Winter'); </span></span><span><span>$myBooks->push('A Dance with Dragons'); </span></span><span><span>$myBooks->push('A Feast for Crows'); </span></span><span><span>$myBooks->push('A Storm of Swords'); </span></span><span><span>$myBooks->push('A Clash of Kings'); </span></span><span><span>$myBooks->push('A Game of Thrones');</span></span></span>如果我們刪除它怎麼辦?
<span><span><?php </span></span><span><span>echo $myBooks->pop(); // outputs 'A Game of Thrones' </span></span><span><span>echo $myBooks->pop(); // outputs 'A Clash of Kings' </span></span><span><span>echo $myBooks->pop(); // outputs 'A Storm of Swords'</span></span></span>如果我們添加新項目?
<span><span><?php </span></span><span><span>echo $myBooks->top(); // outputs 'A Feast for Crows'</span></span></span>您可以首先看到堆棧在最後一個。最後添加到堆棧中的任何內容都是第一個要刪除的。如果您繼續彈出物品直到堆棧為空,則將獲得堆棧下流運行時異常。
<span><span><?php </span></span><span><span>echo $myBooks->pop(); // outputs 'A Feast for Crows'</span></span></span>哦,您好…PHP提供了一個堆棧跟踪,顯示了程序執行呼叫堆棧事先,並且要截至例外!
<span><span><?php </span></span><span><span>$myBooks->push('The Armageddon Rag'); </span></span><span><span>echo $myBooks->pop(); // outputs 'The Armageddon Rag'</span></span></span>splstack
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Stack is empty!' in /home/ignatius/Data Structures/code/array_stack.php:33 Stack trace: #0 /home/ignatius/Data Structures/code/example.php(31): ReadingList->pop() #1 /home/ignatius/Data Structures/code/array_stack.php(54): include('/home/ignatius/...') #2 {main} thrown in /home/ignatius/Data Structures/code/array_stack.php on line 33SPL擴展提供了一組標準數據結構,包括Splstack類(PHP5> = 5.3.0)。 我們可以使用以下內容來實現相同的對象,儘管更簡短,但使用以下方式:
Splstack類實現了比我們最初定義的多種方法。這是因為Splstack被實現為雙關聯列表,該列表提供了實現可遍歷堆棧的能力。 鏈接列表是另一種抽像數據類型本身,是用於表示特定序列的對象(節點)的線性集合,其中集合中的每個節點都保持一個指向集合中的下一個節點的指針。以最簡單的形式,一個鏈接列表看起來像這樣:
<span><span><?php </span></span><span><span>class ReadingList extends SplStack </span></span><span><span>{ </span></span><span><span>}</span></span></span>
在雙關聯列表中,每個節點都有兩個指示,每個指向集合中的下一個和上一個節點。這種類型的數據結構允許在兩個方向上遍歷遍歷。
<span><span><?php </span></span><span><span>class ReadingList </span></span><span><span>{ </span></span><span> <span>protected $stack; </span></span><span> <span>protected $limit; </span></span><span> </span><span> <span>public function __construct($limit = 10) { </span></span><span> <span>// initialize the stack </span></span><span> <span>$this->stack = array(); </span></span><span> <span>// stack can only contain this many items </span></span><span> <span>$this->limit = $limit; </span></span><span> <span>} </span></span><span> </span><span> <span>public function push($item) { </span></span><span> <span>// trap for stack overflow </span></span><span> <span>if (count($this->stack) limit) { </span></span><span> <span>// prepend item to the start of the array </span></span><span> <span>array_unshift($this->stack, $item); </span></span><span> <span>} else { </span></span><span> <span>throw new RunTimeException('Stack is full!'); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>public function pop() { </span></span><span> <span>if ($this->isEmpty()) { </span></span><span> <span>// trap for stack underflow </span></span><span> <span>throw new RunTimeException('Stack is empty!'); </span></span><span> <span>} else { </span></span><span> <span>// pop item from the start of the array </span></span><span> <span>return array_shift($this->stack); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>public function top() { </span></span><span> <span>return current($this->stack); </span></span><span> <span>} </span></span><span> </span><span> <span>public function isEmpty() { </span></span><span> <span>return empty($this->stack); </span></span><span> <span>} </span></span><span><span>}</span></span></span>為了以相反的順序穿越堆棧,我們只需將迭代器模式設置為FIFO(首先,首先):
<span><span><?php </span></span><span><span>$myBooks = new ReadingList(); </span></span><span> </span><span><span>$myBooks->push('A Dream of Spring'); </span></span><span><span>$myBooks->push('The Winds of Winter'); </span></span><span><span>$myBooks->push('A Dance with Dragons'); </span></span><span><span>$myBooks->push('A Feast for Crows'); </span></span><span><span>$myBooks->push('A Storm of Swords'); </span></span><span><span>$myBooks->push('A Clash of Kings'); </span></span><span><span>$myBooks->push('A Game of Thrones');</span></span></span>
隊列
如果您曾經在超市結帳處遇到過一條線,那麼您會知道排隊的第一人是首先服務的。在計算機術語中,隊列是另一種抽像數據類型,它首先在的基礎上或FIFO上以的方式運行。庫存也以FIFO進行管理,特別是如果此類物品具有易腐爛性質。 定義隊列的基本操作是:- init - 創建隊列。
- 候選 - 在隊列的“端”(尾巴)中添加一個項目。
- Dequeue - 從隊列的“正面”(頭)中刪除項目。 isempty - 返回隊列是否不包含任何項目。
- >
<span><span><?php </span></span><span><span>class ReadingList </span></span><span><span>{ </span></span><span> <span>protected $stack; </span></span><span> <span>protected $limit; </span></span><span> </span><span> <span>public function __construct($limit = 10) { </span></span><span> <span>// initialize the stack </span></span><span> <span>$this->stack = array(); </span></span><span> <span>// stack can only contain this many items </span></span><span> <span>$this->limit = $limit; </span></span><span> <span>} </span></span><span> </span><span> <span>public function push($item) { </span></span><span> <span>// trap for stack overflow </span></span><span> <span>if (count($this->stack) limit) { </span></span><span> <span>// prepend item to the start of the array </span></span><span> <span>array_unshift($this->stack, $item); </span></span><span> <span>} else { </span></span><span> <span>throw new RunTimeException('Stack is full!'); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>public function pop() { </span></span><span> <span>if ($this->isEmpty()) { </span></span><span> <span>// trap for stack underflow </span></span><span> <span>throw new RunTimeException('Stack is empty!'); </span></span><span> <span>} else { </span></span><span> <span>// pop item from the start of the array </span></span><span> <span>return array_shift($this->stack); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>public function top() { </span></span><span> <span>return current($this->stack); </span></span><span> <span>} </span></span><span> </span><span> <span>public function isEmpty() { </span></span><span> <span>return empty($this->stack); </span></span><span> <span>} </span></span><span><span>}</span></span></span>spldoublylinkedlist 還實現了ArrayAccess接口,因此您還可以將項目添加到Splequeue和Splstack中,作為數組元素:
<span><span><?php </span></span><span><span>$myBooks = new ReadingList(); </span></span><span> </span><span><span>$myBooks->push('A Dream of Spring'); </span></span><span><span>$myBooks->push('The Winds of Winter'); </span></span><span><span>$myBooks->push('A Dance with Dragons'); </span></span><span><span>$myBooks->push('A Feast for Crows'); </span></span><span><span>$myBooks->push('A Storm of Swords'); </span></span><span><span>$myBooks->push('A Clash of Kings'); </span></span><span><span>$myBooks->push('A Game of Thrones');</span></span></span>從隊列的前面刪除項目:
<span><span><?php </span></span><span><span>echo $myBooks->pop(); // outputs 'A Game of Thrones' </span></span><span><span>echo $myBooks->pop(); // outputs 'A Clash of Kings' </span></span><span><span>echo $myBooks->pop(); // outputs 'A Storm of Swords'</span></span></span>Enqueue()是推動()的別名,但請注意,Dequeue()不是POP()的別名; POP()在隊列的上下文中具有不同的含義和功能。如果我們在此處使用了pop(),它將從隊列的末端(尾巴)刪除違反FIFO規則的項目。 同樣,要查看隊列的前面(頭),我們必須使用bottol()而不是top():
<span><span><?php </span></span><span><span>echo $myBooks->top(); // outputs 'A Feast for Crows'</span></span></span>
摘要
在本文中,您已經看到瞭如何在編程中使用堆棧和隊列抽像數據類型。這些數據結構是抽象的,因為它們是由可以自身執行的操作定義的,從而在其實現和基礎數據之間創建了一個牆。 這些結構還受到此類操作的影響的約束:您只能從堆棧頂部添加或刪除項目,並且只能從隊列的前面刪除項目,或在隊列的後部添加項目。 Alexandre Dulaunoy的圖像通過Flickr 經常詢問有關PHP數據結構的問題(常見問題解答)> PHP中的數據結構的不同類型?陣列是PHP中最常見和通用的數據結構。他們可以容納任何類型的數據,包括其他數組,並且可以索引或關聯。 PHP中的對像是類的實例,可以具有屬性和方法。資源是包含對外部資源的參考的特殊變量,例如數據庫連接。
>>我如何在PHP?
中實現堆棧?最後,首先)原理。在PHP中,您可以使用Splstack類實現堆棧。您可以使用push()方法將元素推到堆棧上,然後使用pop()方法將彈出元素從堆棧中。 > php?
中的數組和對象之間有什麼區別PHP中的數組和對像都是數據結構的類型,但是它們具有一些關鍵差異。數組是值的簡單列表,而對像是類的實例,可以具有屬性和方法。數組可以索引或關聯,而對象始終使用字符串鍵。陣列更具通用性,更易於使用,而對象則提供了更多的結構和封裝。 >我如何使用數據結構來提高我的PHP代碼的性能? 使用正確的數據結構可以顯著提高您的PHP代碼的性能。例如,如果您需要存儲大量元素並經常搜索特定元素,則使用哈希表或集合比使用數組要快得多。同樣,如果您需要在兩端經常添加和刪除元素,那麼使用deque比使用數組更有效。
>>中實現隊列FIFO(首先,首先)原則。在PHP中,您可以使用Splqueue類實現隊列。您可以使用eNqueue()方法將元素加入隊列,並使用Dequeue()方法。 🎜>堆棧和隊列都是數據結構的兩種類型,但是它們在添加和刪除元素的方式上具有關鍵區別。一個堆棧遵循LIFO(最後,首先)原理,這意味著添加的最後一個元素是第一個要刪除的元素。另一方面,隊列遵循FIFO(首先,首先)原理,這意味著添加的第一個元素是要刪除的第一個元素。 使用PHP中的數據結構可以提供多種好處。它們可以幫助您以更高效和合乎邏輯的方式組織數據,這可以使您的代碼易於理解和維護。它們還可以提高您的代碼性能,尤其是在處理大量數據或複雜操作時。 >如何在php?
>如何在PHP中實現二進制樹?每個節點最多有兩個孩子的數據結構,稱為左子女和右子女。在PHP中,您可以使用具有該屬性的屬性和左右子女的屬性實現二進制樹。然後,您可以使用方法來添加,刪除和搜索樹中的節點。
以上是PHP主| PHP開發人員的數據結構:堆棧和隊列的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Laravel使用其直觀的閃存方法簡化了處理臨時會話數據。這非常適合在您的應用程序中顯示簡短的消息,警報或通知。 默認情況下,數據僅針對後續請求: $請求 -

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显著减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想為客戶最緊迫的問題提供實時的即時解決方案? 實時聊天使您可以與客戶進行實時對話,並立即解決他們的問題。它允許您為您的自定義提供更快的服務

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

PHP日誌記錄對於監視和調試Web應用程序以及捕獲關鍵事件,錯誤和運行時行為至關重要。它為系統性能提供了寶貴的見解,有助於識別問題並支持更快的故障排除

Laravel的服務容器和服務提供商是其架構的基礎。 本文探討了服務容器,詳細信息服務提供商創建,註冊,並通過示例演示了實際用法。 我們將從OVE開始


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載
最受歡迎的的開源編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器