php標準庫spl之鏈表,堆棧,隊列

雙向鏈表類:SplDoublyLinkedList

這裏寫圖片描述

1. 增刪節點的方法

push:向鏈表的尾部插入一個節點
pop:獲取鏈表中的尾部節點,並且從鏈表中刪除這個節點;操作不改變當前指針的位置
unshift:向鏈表的頭部插入一個節點
shift:刪除一個鏈表頭部節點

2. 指針操作方法

rewind:使鏈表的當前指針指向鏈表的頭部(即bottom)
current:獲得鏈表當前節點指針指向的元素,必須在調用之前先調用rewind。當指向的節點被刪除之後,會指向一個空節點
next:讓鏈表當前的指針指向下一個節點,curent的返回值隨之改變
bottom:獲得鏈表頭部元素,當前指針位置不變
top:獲得鏈表尾部元素,當前指針位置不變

3.其他方法(用法見堆棧類)

valid:檢查鏈表中是否還存在節點,循環輸出時,可以用作判斷
count:統計鏈表中節點的個數
key:返回當前節點的鍵值
offsetSet :設置指定鍵的值,注意:如鍵爲0,在鏈表中0指向頭部即bottom,在堆棧中指向棧頂。
offunset:註銷指定鍵的值

<?php
/**
 * Created by 馬廷廣
 * User: 馬廷廣
 * Date: 2015/8/5
 * Time: 10:52
 */
$obj = new SplDoublyLinkedList();
$obj->push('b');
$obj->push('c');
$obj->unshift('a');
var_dump($obj);
/*   array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
)
*/
$obj->rewind();
var_dump($obj->current());//string(1) "a"
$obj->next();
var_dump($obj->current());//string(1) "a"
var_dump($obj->bottom());//string(1) "a"
var_dump($obj->top());//string(1) "c"
var_dump($obj->pop());//string(1) "c"
var_dump($obj);
/*
*  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
  }
*/
var_dump($obj->shift());//string(1) "a"
var_dump($obj);
/*
* array(1) {
    [0]=>
    string(1) "b"
  }
*/

堆棧類:繼承自SplDoublyLinkedList類的SplStack類

原理:堆棧類的底層是由棧實現的,棧是一種先進後出的數據結構,所以SplStack類的一些繼承自SplDoublyLinkedList類的方法有一些理解上的不同,如rewind方法,spl使用rewind方法後指針將指向圖中的棧頂,push和pop操作的是棧頂元素,unshift和shift操作的是棧底元素 這裏寫圖片描述

<?php
/**
 * Created by 馬廷廣
 * User: 馬廷廣
 * Date: 2015/8/5
 * Time: 11:47
 */
$stack=new SplStack();
$stack->push('a');
$stack->push('b');
$stack->push('c');
echo $stack->count();//3

$stack->rewind();
echo $stack->current();//c

$stack->offsetSet(0,'d');//offsetSet中0指向的是圖中的棧頂,由棧頂向下遞增1,2,3,4
while($stack->valid()){
    echo $stack->key()."->".$stack->current();
    $stack->next();
}
/*2->d
1->b
0->a
*/

隊列類:繼承自SplDoublyLinkedList類的SplQueue類這裏寫圖片描述

enqueue:進入隊列
dequeue:退出隊列
隊列類的rewind,offsetSet等方法類似於鏈表

<?php
/**
 * Created by 馬廷廣
 * User: 馬廷廣
 * Date: 2015/8/5
 * Time: 12:36
 */

$obj = new SplQueue();
$obj->enqueue('a');
$obj->enqueue('b');
$obj->enqueue('c');
var_dump($obj);
/*    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
*/
$obj->unshift("d");
$obj->push('e');
var_dump($obj);
/*
*  array(5) {
    [0]=>
    string(1) "d"
    [1]=>
    string(1) "a"
    [2]=>
    string(1) "b"
    [3]=>
    string(1) "c"
    [4]=>
    string(1) "e"
  }
*/
$obj->rewind();
echo $obj->current();//d
$obj->offsetSet(0,'h');
var_dump($obj);
/*
* array(5) {
    [0]=>
    string(1) "h"
    [1]=>
    string(1) "a"
    [2]=>
    string(1) "b"
    [3]=>
    string(1) "c"
    [4]=>
    string(1) "e"
  }
*/
發佈了40 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章