這篇文章介紹的內容是關於php中堆和棧的使用,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
眾所周知,php提供了一組函式可以用於push與pop(堆疊)還有shift與unshift(佇列)來運算元組元素。
1、push與pop
這兩個函式操作的是棧,遵循先進後出的原則。就像是往木桶裡面加東西一樣。通過array_push進行入棧操作,array_pop進行出棧操作。先進棧的部分在木桶的最下面。
(1)array_push()方法
array_push
() 函式向第乙個引數的陣列尾部新增乙個或多個元素(入棧),然後返回新陣列的長度。該函式等於多次呼叫
$array
=
$value
。
(2)array_pop()方法
array_pop
() 函式刪除陣列中的最後乙個元素。
返回陣列的最後乙個值。如果陣列是空的,或者非陣列,將返回 null。
(3)例項:
<?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?>
1、什麼是佇列
首先應該明確,佇列和普通的堆疊是不一樣的,佇列遵循的是「先進先出」。堆疊只能在棧頂刪除和插入。佇列是每乙個新插入的元素都是在佇列的尾部插入,每乙個要刪除的元素都是位於佇列的頭部,當從佇列的頭部刪除了乙個元素後,其它佇列中的元素就會向前進1位,在元素移動到隊首時,就會接受出隊的操作。
佇列模型可以理解為排隊吃飯。先排隊的人就先吃到飯。
2、佇列的操作
php中使用array_push()來增加元素,使用array_shift()刪除元素。
(1)array_shift()方法
array_shift
() 函式刪除陣列中第乙個元素,並返回被刪除元素的值。
如果鍵名是數字的,所有元素都會獲得新的鍵名,從 0 開始,並以 1 遞增
(2)例項:
<?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佇列原理及基於佇列的寫檔案案例
end
棧和堆的使用
棧和堆的使用方法 棧 1.對於頻繁使用的程式 原因是由於使用之後就自動解散 2.對於開闢較小的空間,原因棧本身的記憶體不到1兆 3.棧對於開闢的空間和釋放空間都是系統自己完成,和函式的壽命週期有關 4.棧開闢空間效率較高,原因是不需要頭部和尾部空間 5.棧的存放方式是由高到低,出的時候是先進後出 6...
c 中的堆和棧
1 記憶體分配方面 堆 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式是類似於鍊錶。可能用到的關鍵字如下 new malloc delete free等等。棧 由編譯器 compiler 自動分配釋放,存放函式的引數值,區域性變數的值等。...
c 中的堆和棧
1 記憶體分配方面 堆 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式是類似於鍊錶。可能用到的關鍵字如下 new malloc delete free等等。棧 由編譯器 compiler 自動分配釋放,存放函式的引數值,區域性變數的值等。...