簡體   English   中英

Splstack 它是如何工作的? 為什么?

[英]Splstack how it's works? and why?

<?php
    $stack = new SplStack();

    $stack->add(0, 'one');
    $stack->add(1, 'two');
    $stack->add(2, '2015');

    echo "<pre>";
    print_r($stack);

當我運行此代碼時,所有項目都存儲了一個名為dllist的屬性(我希望),這是預期的結果。

SplStack Object
(
    [flags:SplDoublyLinkedList:private] => 6
    [dllist:SplDoublyLinkedList:private] => Array
        (
            [0] => one
            [1] => two
            [2] => 2015
        )

)

但是我運行下面的代碼,工作方式與上面的代碼相同,為什么當我嘗試時, $stack[] = 'one'; 為什么沒有得到錯誤? php 怎么知道$stack[] = 'one'; 應該存儲在dllist嗎?

<?php
    $stack = new SplStack();

    $stack[] = 'one';
    $stack[] = 2015;
    $stack[] = 'two';

    echo "<pre>";
    print_r($stack);

我預計會出現類似以下語句的錯誤:

<?php

    $int = 2015;
    $int[] = 300; //Warning: Cannot use a scalar value as an array in 

    $str = 'foo';
    $str[] = 'foo'; //Fatal error: [] operator not supported for strings in

    $obj = new stdClass(); 
    $obj[] = 'new one'; //Fatal error: Cannot use object of type stdClass as array in 

SplStack 實現了接口 ArrayAccess,使得 SplStack 類具有數組特性: http ://php.net/manual/en/class.arrayaccess.php

堆棧:在下推堆棧中只允許兩種操作:將項目推入堆棧,並將項目彈出堆棧。 堆棧是一種訪問受限的數據結構 - 元素只能在堆棧頂部添加和刪除。 push 將一個項目添加到堆棧的頂部,pop 從頂部刪除該項目。 一個有用的比喻是想想一堆書; 您可以只刪除頂部的書,也可以在頂部添加新書。

堆

排隊:排隊的一個很好的例子是加州大學美食廣場的一排學生。 在隊列后面添加新的一行,而刪除(或服務)發生在前面。 在隊列中只允許入隊和出隊兩個操作。 Enqueue 意味着將一個 item 插入到隊列的后面,dequeue 意味着移除前面的 item。 該圖演示了 FIFO 訪問。 堆棧和隊列之間的區別在於刪除。 在堆棧中,我們刪除最近添加的項目; 在隊列中,我們刪除最近最少添加的項目。!

例如堆棧

頂部的最后一個推送元素

后進先出 (LIFO)


$q = new SplStack();

$q[] = 1;
$q[] = 2;
$q[] = 3;
$q->push(4);
$q->add(4,5);

$q->rewind();
while($q->valid()){
    echo $q->current(),"\n";
    $q->next();
}
?>

Output
5
4
3
2
1

例如隊列

底部的最后一個推送元素

先進先出 (FIFO)


<?php 


// Create a new empty queue 

$gfg = new SplQueue(); 



$gfg[] = 1; 

$gfg[] = 2; 

$gfg[] = 3; 


// Dequeue element 

echo $gfg->dequeue() . "\n"; 

echo $gfg->dequeue() . "\n"; 


?> 
Output:
1
2

小心有人升有人降

如何工作堆棧另一個例子

隊列是如何工作的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM