萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP實現一個雙向隊列例子

PHP實現一個雙向隊列例子

deque,全名double-ended queue,是一種具有隊列和棧的性質的數據結構。雙端隊列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙向隊列(雙端隊列)就像是一個隊列,但是你可以在任何一端添加或移除元素。

雙端隊列(deque)是由一些項的表組成的數據結構,對該數據結構可以進行下列操作:

    push(D,X) 將項X 插入到雙端隊列D的前端
    pop(D) 從雙端隊列D中刪除前端項並將其返回
    inject(D,X) 將項X插入到雙端隊列D的尾端
    eject(D) 從雙端隊列D中刪除尾端項並將其返回

PHP實現代碼

 代碼如下 復制代碼 <?php
class DoubleQueue 
{
    public $queue = array();
    
    /**(尾部)入隊  **/
    public function addLast($value) 
    {
        return array_push($this->queue,$value);
    }
    /**(尾部)出隊**/
    public function removeLast() 
    {
        return array_pop($this->queue);
    }
    /**(頭部)入隊**/
    public function addFirst($value) 
    {
        return array_unshift($this->queue,$value);
    }
    /**(頭部)出隊**/
    public function removeFirst() 
    {
        return array_shift($this->queue);
    }
    /**清空隊列**/
    public function makeEmpty() 
    {
        unset($this->queue);
    }
    
    /**獲取列頭**/
    public function getFirst() 
    {
        return reset($this->queue);
    }
 
    /** 獲取列尾 **/
    public function getLast() 
    {
        return end($this->queue);
    }
 
    /** 獲取長度 **/
    public function getLength() 
    {
        return count($this->queue);
    }
    
}

例子

編寫支持雙端隊伍的例程,每種操作均花費O(1)時間

 代碼如下 復制代碼

<?php
class deque
{
 public $queue  = array();
 public $length = 0;
  
 public function frontAdd($node){
  array_unshift($this->queue,$node);
  $this->countqueue();
 }
 public function frontRemove(){
  $node = array_shift($this->queue);
  $this->countqueue();
  return $node;
 }
  
 public function rearAdd($node){
  array_push($this->queue,$node);
  $this->countqueue();
 }
 
 public function rearRemove(){
  $node = array_pop($this->queue);
  $this->countqueue();
  return $node;
 }
 
 public function countqueue(){
  $this->length = count($this->queue);   
 }
}
$fruit = new deque();
echo $fruit -> length;
$fruit -> frontAdd("Apple");
$fruit -> rearAdd("Watermelon");
echo '<pre>';
print_r($fruit);
echo '</pre>';
?>

結果

0
deque Object
(
    [queue] => Array
        (
            [0] => Apple
            [1] => Watermelon
        )
    [length] => 2
)

copyright © 萬盛學電腦網 all rights reserved