數組函數與數據結構《實現堆棧,實現隊列》

在強類型的變成語言中,有專用的數據結構解決方案。一般都是建立一個容器,在這個容器中能夠存儲任意類型的數據,而且能夠根據容器中存儲的數據決定容器的容量,達到能夠變長的容器結構,好比鏈表、堆棧及隊列等都是數據結構中經常使用的形式。在PHP中,一般都是使用數組來完成其餘語言使用數據結構才能完成的工做。它是弱類型語言,在同一個數組中就能夠存儲多種類型的數據,並且PHP中的數組沒有長度限制,數組存儲數據的容量還能夠根據裏面元素個數的增減自動調整。php

1、使用數組實現堆棧html

堆棧是數據結構的一種實現形式,是一種使用很是普遍的存儲數據的容器。在堆棧這種容器中,最後壓入的數據(進桟),將會被最早彈出(出棧)。即在數據存儲時採用「先進後出」的數據結構。在PHP中,將數組當作一個棧,使用array_push()和array_pop()兩個系統函數便可完成數據的進桟和出棧操做。web

①函數array_push()數組

array_push()函數向第一個參數的數組尾部添加一個或多個元素(入棧),而後返回新數組的長度。該函數等於屢次調用$array[]=$value。其函數的原型以下:數據結構

int array_push(array &array ,mixed var [,mixed...])函數

該函數的第一個參數是必選的,做爲棧容器的一個數組。第二個參數也是必選的,在第一個參數中的數組尾部添加的一個數據。還能夠有多個可選參數,均可以添加到第一個參數的數組中的尾部,即入棧。但須要注意即便數組中有字符串鍵名,添加的元素也始終是數字鍵。函數array_push()使用的代碼以下所示:學習

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
     $a = array ( "Dog" , "Cat" );
     array_push ( $a , "Horse" , "Bird" );
     print_r( $a );          //輸出Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird )
 
     //帶有字符串鍵的數組:
     $a = array ( "a" => "Dog" , "b" => "Cat" );
     array_push ( $a , "Horse" , "Bird" );
     print_r( $a );              //輸出Array ( [a] => Dog [b] => Cat [0] => Horse [1] => Bird )
 
     //使用array_push()函數和使用這種直接賦值初始化數組的方式是同樣的
     $lamp [ "web" ]= "www" ;
     print_r( $a )          //輸出Array ( [a] => Dog [b] => Cat [0] => Horse [1] => Bird [web]=> www)
?>

若是用array_push()來給數組添加一個單元,還不如用「$array[]=$value」形式,由於這樣沒有調用函數的額外負擔,並且使用後者還能夠添加鍵值是字符串的關聯數組。若是第一個參數不是數組,array_push()將發出一條警告。這和「$array[]=$value」的行爲不一樣,後者會新建一個數組。spa

②array_pop(array &array)code

array_pop函數刪除數組中的最後一個元素,即將數組最後一個單元彈出(出棧),並將數組的長度減1,若是數組爲空(或者不是數組)將返回NULL。其函數的原型以下:htm

mixed array_pop(array &array)

該函數只有一個參數,即做爲棧的數據。返回彈出的數組中最後一個元素的值。函數array_pop()使用的代碼以下所示:

1
2
3
4
5
6
7
<?php
     //聲明一個數組做爲棧
     $lamp = array ( "Linux" , "Apache" , "MySQL" , "PHP" );
 
     array_pop ( $lamp );
     print_r( $lamp )          //輸出 array([0]=>Linux [1]=>Apache [2]=>MySQL)
?>

2、使用數組實現隊列

PHP中的數組處理函數還可使用數組實現隊列的操做。堆棧是「後進先出」原則,而一個隊列則容許在一端插入數據,在另外一端刪除數據,也就是實現最早進入隊列的數據最早退出隊列,就像銀行的排號機,最早排好的號最早辦理業務。即隊列是「先進先出」的原則。

使用array_push()和array_pop()函數都是從數組的最後添加數據和刪除數據,若是使用array_push()函數在數組的最後添加數據,而將數組中第一個元素刪除就能夠實現一個隊列。

③函數array_shift()

函數array_shift()能夠實現刪除數組中的第一個元素,並返回被刪除元素的值。其函數的原型以下:

mixed array_shift(array &array)

該函數和array_pop()函數同樣,都是隻有一個必選參數,其參數爲實現隊列的數組。將數組中第一個單元移出並做爲結果返回,將數組的長度減1,還將全部其餘元素向前移動一位。全部的數字鍵名將改成從0開始計數,字符串鍵名將保持不變。若是數組爲空(或者不是數組),則返回NULL。函數array_shift()使用的代碼以下所示:

1
2
3
4
5
6
7
8
9
10
<?php
     //帶有字符串鍵值的關聯數組
     $lamp = array ( "a" => "Linux" , "b" => "Apache" , "c" => "MySQL" , "d" => "PHP" );
     array_shift ( $lamp );       
     print_r( $lamp );            //輸出:Array([b]=>Apache [c]=>MySQL [d]=>PHP)
 
     $lamp = array ( "Linux" , "Apache" , "MySQL" , "PHP" );
     array_shift ( $lamp );
     print_r( $lamp );            //數字下標從新索引Array([0]=>Apache [1]=>MySQL [2]=>PHP)
?>

④函數array_unshift()

在PHP中海可使用array_unshift()函數在隊列數組的開頭插入一個或多個元素,該函數執行成功將返回插入元素個數,使用格式和函數array_push()是同樣的。經過前面介紹的這4個函數從而實現了從數組的任意一端添加和刪除數據。

 
相關文章
相關標籤/搜索