php 实现队列和双向队列及其用例

    技术2022-05-20  35

    代码 :

    <?php //basic queue. class Queue {     public $queue_len;     public $queue = array ();          function __construct($queue_len = 2) {         $this->queue_len = $queue_len;     }          function QueueEmpty() {         return count ( $this->queue ) < 1 ? true : false;     }          function QueueFull() {         return (count ( $this->queue ) == $this->queue_len) ? true : false;     }          function EnQueue($elm) {         if (! $this->QueueFull ()) {             array_unshift ( $this->queue, $elm );         }     }          function DeQueue() {         if (! $this->QueueEmpty ()) {             return array_pop ( $this->queue );         }         return null;     }          function QueueFront() {         return end ( $this->queue );     } } //double quere class Dequeue {     public $queue_len;     public $queue = array ();     public $direction = 1; //正向1,反向2          function __construct($queue_len = 2) {         $this->queue_len = $queue_len;     }          function QueueEmpty() {         return count ( $this->queue ) < 1 ? true : false;     }          function QueueFull() {         return (count ( $this->queue ) == $this->queue_len) ? true : false;     }          function EnQueue($elm) {         if (! $this->QueueFull ()) {             switch ($this->direction) {                 case 1 :                     {                         array_unshift ( $this->queue, $elm );                         break;                     }                 case 2 :                     {                         $this->queue [] = $elm;                         break;                     }             }         }     }          function DeQueue() {         if (! $this->QueueEmpty ()) {             switch ($this->direction) {                 case 1 :                     {                         return array_pop ( $this->queue );                         break;                     }                 case 2 :                     {                         return array_shift ( $this->queue );                         break;                     }             }         }         return null;     }          function QueueFront() {         switch ($this->direction) {             case 1 :                 {                     return end ( $this->queue );                     break;                 }             case 2 :                 {                     return  reset( $this->queue );                     break;                 }         }     }          function setdirection($direction = 1) {         $this->direction = $direction;     } } ?>

     

    调用:

    <?php require_once './queue.php'; $queue = new Dequeue(3); echo ">> 正向入队数字1,2,3.../n"; for($i=1;$i<4;$i++){     $queue->EnQueue($i); } echo ">> 队列为 /n"; print_r($queue->queue); echo ">> 首元素出队列 /n"; echo $queue->DeQueue(); echo ">> 队列为 /n"; print_r($queue->queue); echo "<br />"; echo ">> 反向入队数字1,2,3.../n"; $rq=new Dequeue(3); $rq->setdirection(2); for($i=1;$i<4;$i++){     $rq->EnQueue($i); } echo ">> 队列为 /n"; print_r($rq->queue); echo ">> 首元素出队列 /n"; echo $rq->DeQueue(); echo ">> 队列为 /n"; print_r($rq->queue); ?>


    最新回复(0)