您的位置:首页 > 编程语言 > PHP开发

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

2011-03-02 21:41 423 查看
代码 :

<?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);

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: