php中堆和棧的使用

2021-08-28 06:54:54 字數 2823 閱讀 1088

這篇文章介紹的內容是關於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 自動分配釋放,存放函式的引數值,區域性變數的值等。...