PHP數據結構->模擬靜態隊列

<?php

/********************************************************
* 我寫的PHP都是從C語言的數據結構中演化而來************************
**************************************************************

/**
 *  1.用PHP模擬一個靜態隊列 (以數組爲列子 只有6個元素) 是一個循環隊列
 *  2.pBase->初始化後指向一個數組
 *  3.front ->初始化爲0,指向隊列的第一個元素
 *  4.rear->初始化爲0,指向最後一個元素的下一個元素
 *  5.end_queue-> 保存出隊的值之後的數字 
 *  6.en_queue ->入隊列的方法
 *  7.full_queue->判斷隊列是否已滿
 *  8.empty_queue->判斷隊列是否爲空
 *  9.traverse_queue->遍歷隊列
 *  10.out_queue->出隊的函數
 *  @Author 任孟洋 
 *  @time   2013-8-10
 ***/

 Class  Queue {

      public  $pBase;       //一個數組
      public  $front;       //指針指向隊列的第一個元素 
      public  $rear;        //指針指向隊列的最後一個元素
      public  $End_queue;   //記錄出隊的元素
      public  $Start_queue; //記錄入隊的元素

       //初始化
      public  function  __construct(){       
           $this->pBase =Array();
           $this->front =  0;
           $this->rear = 0;
      }

       // 入隊
      public function en_queue(&$QUEUE,$val){

        if ( $this->full_queue($QUEUE)){

             return  FALSE; //失敗
        
              } else {        
                                                                         
           $QUEUE->pBase[$QUEUE->rear] = $val;      //把元素入隊 (成功)
                 
           $QUEUE->rear =($QUEUE->rear+1) % 6;//rear往上移動一位
            
                   return   TRUE;
        
              }
      }

    //判斷隊列是否已滿
   public function full_queue($QUEUE){

               if(($QUEUE->rear+1) % 6 === $QUEUE->front){
              
                    return  TRUE; //滿
               
               } else {
               
                    return  FALSE; //沒滿
               
               }

      }
  
    //判斷是否爲空
      public  function  empty_queue($QUEUE){

               if ($QUEUE->front == $QUEUE->rear){
                  
                     return TRUE;
               
               } else {
               
                     return FALSE;
               
               }
      }  
     
        //循環數輸出隊列
       public function  traverse_queue($QUEUE){
        
             $q = $QUEUE->front ;
             
             while ( $q != $QUEUE->rear){

                  echo  '數列爲<br/>'.$QUEUE->pBase[$q].'<br/>';
                                                                        
                  $q = ($q+1) % 6;//向上移動一位
             }

      }

      //出隊
      public function  out_queue($QUEUE){
            
               if(!$this->empty_queue($QUEUE)){

                     $this->End_queue = $QUEUE->pBase[$QUEUE->front];
             
                     $QUEUE->front = ($QUEUE->front + 1) % 6;  //向上移動一位       
             
                 
                  }
       }
}

   //輸出界面

   //顯示格式
   header("Content-Type:text/html;charset=UTF-8;");
   echo '<hr/>';
   echo '沒有初始化以前的空間是多少'.var_dump(memory_get_usage());
   echo  '<hr/>'; 
    //實例化
   $QUEUE = new Queue();


    /*入隊*/
   $QUEUE->en_queue($QUEUE,1);
   $QUEUE->en_queue($QUEUE,2);
   $QUEUE->en_queue($QUEUE,3);
   $QUEUE->en_queue($QUEUE,4);
   $QUEUE->en_queue($QUEUE,5);
   $QUEUE->en_queue($QUEUE,6);
   
   /**出隊**/
   $QUEUE->out_queue($QUEUE);


   /*入隊*/
  $QUEUE->en_queue($QUEUE,6);
  $QUEUE->traverse_queue($QUEUE); //遍歷

   echo '<hr/>';
   echo '出對之後的數字'.$QUEUE->End_queue.'<br/>';


   echo '初始化之後'.var_dump(memory_get_usage());
   echo  '<hr/>';

 

?>
相關文章
相關標籤/搜索