php中堆和棧的使用

這篇文章介紹的內容是關於php中堆和棧的使用,有着一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

一、關於堆和棧的概念及區別

 

這裏參考上篇博客: 淺談堆和棧的區別 
通過這篇文章,我們可以知道廣義的堆和棧到底是什麼,但是具體在php中的使用呢

二、php中的堆棧

衆所周知,PHP提供了一組函數可以用於push與pop(堆棧)還有shift與unshift(隊列)來操作數組元素。

1、push與pop

這兩個函數操作的是棧,遵循先進後出的原則。就像是往木桶裏面加東西一樣。通過array_push進行入棧操作,array_pop進行出棧操作。先進棧的部分在木桶的最下面。

(1)array_push()方法

1

array_push() 函數向第一個參數的數組尾部添加一個或多個元素(入棧),然後返回新數組的長度。該函數等於多次調用 $array[] = $value

(2)array_pop()方法

1

2

array_pop() 函數刪除數組中的最後一個元素。

返回數組的最後一個值。如果數組是空的,或者非數組,將返回 NULL。

(3)實例:

1

2

3

4

5

6

7

<?php

  $arr = array();

  array_push($arr,'aaa');  //先入棧  aaa

  array_push($arr,'bbb');  //後入棧   bbb

  print_r($arr);   //此時打印結果爲:[0]=>aaa,[1]=>bbb

  $arr.pop();   //進行出棧操作,先進後出原則,則此時相當於bbb出棧了。

  print_r($arr);  //打印結果應該是[0]=>aaa?>

三、php實現的隊列

1、什麼是隊列

首先應該明確,隊列和普通的堆棧是不一樣的,隊列遵循的是“先進先出”。堆棧只能在棧頂刪除和插入。隊列是每一個新插入的元素都是在隊列的尾部插入,每一個要刪除的元素都是位於隊列的頭部,當從隊列的頭部刪除了一個元素後,其它隊列中的元素就會向前進1位,在元素移動到隊首時,就會接受出隊的操作。

隊列模型可以理解爲排隊吃飯。先排隊的人就先吃到飯。

2、隊列的操作

php中使用array_push()來增加元素,使用array_shift()刪除元素。

(1)array_shift()方法

1

2

array_shift() 函數刪除數組中第一個元素,並返回被刪除元素的值。

如果鍵名是數字的,所有元素都會獲得新的鍵名,從 0 開始,並以 1 遞增

具體參考手冊:http://www.w3school.com.cn/php/func_array_shift.asp

(2)實例:

1

2

3

4

5

6

7

<?php

   $arr = array();

   array_push($arr,'aaa');  //隊列中添加  aaa

   array_push($arr,'bbb');  // 隊列中添加   bbb

   print_r($arr);  //此時打印輸出爲  [0]=>aaa,[1]=>bbb

   array_shift($arr); //刪除第一個元素,遵循先進先出原則,刪除的是aaa

   print_r($arr);  //打印結果爲  [0]=>bbb?>

(3)雙端隊列

還有一種隊列比較特殊,首尾兩端都允許進行插入和刪除的操作,這種隊列可以稱爲雙端隊列,與標準的隊列不同的就是多了隊首的插入操作和隊尾的刪除操作。一般是通過php的數組函數:array_unshift()和array_shift()。

具體參考:PHP隊列原理及基於隊列的寫文件案例

四、隊列的用途

隊列可以很好地異步處理數據傳送和存儲,當你頻繁地向數據庫中插入數據、頻繁地向搜索引擎提交數據,就可採取隊列來異步插入。另外,還可以將較慢的處理邏輯、有併發數量限制的處理邏輯,通過消息隊列放在後臺處理,例如FLV視頻轉換、發送手機短信、發送電子郵件等。

end

相關推薦:

PHP中字符串與正則表達式

以上就是php中堆和棧的使用的詳細內容,更多請關注php中文網其它相關文章!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章