SPL的常用資料結構 2)

2021-07-10 06:43:58 字數 3519 閱讀 3004

·基本概念

節點1<--訪問-->節點2<--訪問-->節點3  雙向鍊錶

bottom:最先新增到鍊錶中的節點叫做bottom(底部),也稱為頭部(head)

top:最後新增到鍊錶中的節點叫做top(頭部),也稱為尾部

鍊錶指標:是乙個當前關注的節點的標識,可以指向任意節點

當前節點:鍊錶指標指向的節點稱為當前節點

·基本概念

節點1==細化==》節點名稱/節點資料

節點名稱:可以在鍊錶中唯一標識乙個節點的名稱,我們通常稱為節點的key或者offset.

節點資料:存放在鍊錶中的應用資料,我們通常稱為style.

·spldoublylinkedlist類

·操作-當前節點操作:rewind、current、next、prev

-增加節點操作:push、unshift

-刪除節點操作:pop、shift

-定位操作:bottom、top

-特定節點操作:offsetexists、offsetget、offsetset、offsetunset

例項:<?php

$obj = new spldoublylinkedlist();

//把新的節點資料新增到鍊錶的頂部(top)

$obj->push("hello");

$obj->push("2");

$obj->push("3");

//unshift把新的節點資料新增到鍊錶底部(bottom)

$obj->unshift("10");

$obj->rewind();

// rewind操作用於把節點指標指向bottom所在的節點

// current在別的函式呼叫前是不能被呼叫的 所以在使用current前使用rewind

echo "current:".$obj->current()."

";//獲取節點指標指向的節點(當前節點)

$obj->next();

$obj->next();

$obj->pop(); //把top位置的節點從鍊錶中刪除,並返回。如果current正好指向top位置,那麼呼叫pop之後current會失效

echo "

";

print_r($obj);

echo "

";

echo "next node:".$obj->current()."

";$obj->shift();//把bottom位置的節點從鍊錶中刪除,並返回。

echo "

";

print_r($obj);

echo "

";

?>

·理解和回顧

最後進入到堆疊裡面的資料最先拿出堆疊(first in last out filo)

·繼承自spldoublylinkedlist類的splstack類

·操作-push:壓入堆疊(存入)

-pop:退出堆疊(取出)

例項:<?php

$stack = new splstack();

$stack->push("a"); //push操作向堆疊裡面放入乙個節點到top位置

$stack->push("b");

$stack->push("c");

$stack->push("d");

echo "

";

print_r($stack);

echo "

";

echo "bottom:".$stack->bottom()."

";echo "top:".$stack->top()."

";$stack->offsetset(0,'d'); //堆疊的offset=0是top所在的位置,offset=1是top位置節點靠近bottom的相鄰節點,以此類推

echo "

";

print_r($stack);

echo "

";

$stack->rewind(); //雙向鍊錶的rewind和堆疊的rewind相反,堆疊的rewind使得當前指標指向top所在的位置,而雙向鍊錶呼叫之後指向bottom所在位置

echo 'current:'.$stack->current()."

";$stack->next(); //堆疊的next操作使指標指向靠近bottom位置的下乙個節點,而雙向鍊錶是靠近top的下乙個節點

echo 'current:'.$stack->current()."

";// 遍歷堆疊

$stack->rewind();

while($stack->valid())

// 刪除堆疊資料

$popobj = $stack->pop();//pop操作從堆疊裡面提取出最後乙個元素(top位置),同時在堆疊裡面刪除該節點

echo "poped object:".$popobj."

";echo "

";

print_r($stack);

echo "

";

?>

·佇列和堆疊剛好相反,最先進入佇列的元素會最先走出佇列

-就像排隊打飯,排在最前面的人總是最先能夠打到飯

·繼承自spldoublylinkedlist類的splqueue類

·操作-enqueue:進入佇列

-dequeue:退出佇列

例項:<?php

$queue = new splqueue();

$queue->enqueue('a');

$queue->enqueue('b');

$queue->enqueue('c');

echo "

";

print_r($queue);

echo "

";

echo "bottom:".$queue->bottom()."

";echo "top:".$queue->top()."

";$queue->offsetset(0,"a");//佇列裡面offset=0是bottom所在位置,offset=1是top方向的相鄰節點,以此類推

echo "

";

print_r($queue);

echo "

";

$queue->rewind();//佇列裡面的rewind操作使得指標指向bottom所在位置的節點

echo 'current:'.$queue->current()."

";echo "

";

print_r($queue);

echo "

";

// 遍歷佇列

$queue->rewind();

while($queue->valid())

// 刪除佇列資料

$obj = $queue->dequeue();//pop操作從堆疊裡面提取出最後乙個元素(top位置),同時在堆疊裡面刪除該節點

echo "poped object:".$obj."

";echo "

";

print_r($queue);

echo "

";

?>

spl 教程二 資料結構

雙向列表 public function spldoublylinkedlisttest elseif obj valid obj pop var dump obj print r obj 棧public function splstacktest pop stack pop echo pop 佇列...

SPL標準庫 資料結構

資料結構 棧 stack new splstack stack push data1 n stack push data2 n echo stack pop echo stack pop 資料結構 佇列 queue new splqueue queue enqueue data1 n queue e...

常用的資料結構

人們常說資料結構,面試的時候也常被問道資料結構相關的問題,到底什麼是資料結構?資料結構是計算機儲存 組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。資料結構在計算機...