1.應用場景
主要用於學習php擴充套件庫實踐佇列的功能與用法.
使用php語言解決問題,比如演算法面試題等.
2.學習/操作
1.文件閱讀
//php splqueue 佇列簡介
//the splqueue class
2.簡介
splqueue 類通過使用乙個雙向鍊錶來提供佇列的主要功能。
3.實踐 -- 如何使用?
code:
<?php
class test
public static function bar()
public static function msg($msg)
}$queue = new splqueue();
$queue->setiteratormode(splqueue::it_mode_delete);
$queue->enqueue(array("test", "foo"));
$queue->enqueue(array("test", "bar"));
$queue->enqueue(array("test", "msg", "hi there!"));
var_dump($queue);
foreach ($queue as $task) else
}輸出:
object(splqueue)#1 (2) [1]=> array(2) [2]=> array(3) } }
test::foo() called
test::bar() called
hi there!
4.解答演算法面試題
//自行寫php code 尚未解決
<?php
// 104. 二叉樹的最大深度
// 給定乙個二叉樹,找出其最大深度。
// 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
// 說明: 葉子節點是指沒有子節點的節點。
// 示例:
// 給定二叉樹 [3,9,20,null,null,15,7],
// 3
// 9 20
// 15 7
// 返回它的最大深度 3 。
* definition for a binary tree node. 使用php如何實現二叉樹結構? tbd //20201014
* class treenode
class solution {
* @param treenode $root
* @return integer
public function maxdepth($root) {
if($root == null){
return 0;
$queue = new splqueue();
$queue->enqueue($root);
$ans = 0;
while(!$queue->isempty()){
(int) $size = $queue->count();
while($size > 0){
$node = $queue->dequeue();
if($node->left != null)
$queue->enqueue($node->left);
if($node->right != null)
$queue->enqueue($node->right);
$size--;
$ans++;
return $ans;
$root = [3,9,20,null,null,15,7];
$solution = new solution();
$ret = $solution->maxdepth($root);
var_dump($ret); // int(1) 應該是3
//即執行失敗~ 解決問題的關鍵在於如何使用php定義實現二叉樹結構 ?
參見:補充:
完整**
treenode.php
<?php
// 二叉樹結點類
class treenode{
var $val; //var是public的別名
var $left = null;
var $right = null;
function __construct($val){
$this->val = $val;
//構造二叉樹
function createbinarytree(treenode $lchird = null, treenode $rchird = null){
if(!is_null($lchird))
$this->left = $lchird;
if(!is_null($rchird))
$this->right = $rchird;
gettreemaxdepth.php
<?php
require_once './treenode.php';
class solution {
* @param treenode $root
* @return integer
public function maxdepth($root) {
if($root == null){
return 0;
$queue = new splqueue();
$queue->enqueue($root);
$ans = 0;
while(!$queue->isempty()){
(int) $size = $queue->count();
while($size > 0){
$node = $queue->dequeue();
if($node->left != null)
$queue->enqueue($node->left);
if($node->right != null)
$queue->enqueue($node->right);
$size--;
$ans++;
return $ans;
$a = new treenode(3);
$b = new treenode(9);
$c = new treenode(20);
$d = new treenode(15);
$e = new treenode(7);
$a->createbinarytree($b, $c);
$b->createbinarytree(null, null);
$c->createbinarytree($d, $e);
$solution = new solution();
$ret = $solution->maxdepth($a);
var_dump($ret);
輸出結果:
正常解決~
後續補充
3.問題/補充
tbd4.參考
//php splqueue 佇列簡介
//the splqueue class
後續補充
佇列 優先佇列的學習
佇列定義 佇列是限定只能在表尾進行 插入,在表頭進行刪除的線性表 隊尾 允許插入的一端 隊頭 允許刪除的一端 佇列的定義 include queue 標頭檔案 using namespace std 需要加上使用名稱 空間,和sort 排序函式是一樣的。queue int q 格式 queue 型別...
單調佇列學習
單調佇列 在解乙個序列某個區間段的最值問題,我們可以用到單調佇列來解決。比如poj2823 sliding window 就是乙個很好的例子 給定乙個序列,要求序列中固定長度為k 的區間中的最大值和最小值。原理 單調佇列維護的是區間最值 1 最大值的維護 比如我們要維護乙個區間為k的最大值的單調佇列...
JAVA 佇列 學習
一 佇列概述 二 佇列應用場景 三 例項 該 來自中 public class quenetest long endtime system.currenttimemillis system.out.printf speed time is s endtime starttime static cla...