PHP SplQueue 佇列 學習 實踐

2021-10-24 18:44:34 字數 3707 閱讀 7298

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...