PHP主| PHP開發人員的數據結構:堆棧和隊列
鑰匙要點
- 抽像數據類型(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) < $this->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><?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><?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><?php </span></span><span><span>echo $myBooks->top(); // outputs 'A Feast for Crows'</span></span>
<span><span><?php </span></span><span><span>echo $myBooks->pop(); // outputs 'A Feast for Crows'</span></span>
<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>
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 33
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><?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) < $this->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><?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>
隊列
如果您曾經在超市結帳處遇到過一條線,那麼您會知道排隊的第一人是首先服務的。在計算機術語中,隊列是另一種抽像數據類型,它首先在的基礎上或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) < $this->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><?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><?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><?php </span></span><span><span>echo $myBooks->top(); // outputs 'A Feast for Crows'</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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。
