<?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/>'; ?>