国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP實現一個雙向隊列例子

2024-05-04 21:47:43
字體:
來源:轉載
供稿:網友

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

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

push(D,X) 將項X 插入到雙端隊列D的前端

pop(D) 從雙端隊列D中刪除前端項并將其返回

inject(D,X) 將項X插入到雙端隊列D的尾端

eject(D) 從雙端隊列D中刪除尾端項并將其返回

PHP實現代碼如下:

  1. <?php 
  2. class DoubleQueue   
  3. {  
  4.     public $queue = array();  
  5.       
  6.     /**(尾部)入隊  **/ 
  7.     public function addLast($value)   
  8.     {  
  9.         return array_push($this->queue,$value);  
  10.     }  
  11.     /**(尾部)出隊**/ 
  12.     public function removeLast()   
  13.     {  
  14.         return array_pop($this->queue);  
  15.     }  
  16.     /**(頭部)入隊**/ 
  17.     public function addFirst($value)   
  18.     {  
  19.         return array_unshift($this->queue,$value);  
  20.     }  
  21.     /**(頭部)出隊**/ 
  22.     public function removeFirst()   
  23.     {  
  24.         return array_shift($this->queue);  
  25.     }  
  26.     /**清空隊列**/ 
  27.     public function makeEmpty()   
  28.     {  
  29.         unset($this->queue); 
  30.     }  
  31.       
  32.     /**獲取列頭**/ 
  33.     public function getFirst()   
  34.     {  
  35.         return reset($this->queue);  
  36.     }  
  37.     /** 獲取列尾 **/ 
  38.     public function getLast()   
  39.     {  
  40.         return end($this->queue);  
  41.     } 
  42.  
  43.     /** 獲取長度 **/ 
  44.     public function getLength()   
  45.     {  
  46.         return count($this->queue);  
  47.     } 
  48.       

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

  1. <?php  
  2. class deque 
  3.  public $queue  = array(); 
  4.  public $length = 0; 
  5.     
  6.  public function frontAdd($node){ 
  7.   array_unshift($this->queue,$node); 
  8.   $this->countqueue(); 
  9.  } 
  10.  public function frontRemove(){ 
  11.   $node = array_shift($this->queue); 
  12.   $this->countqueue(); 
  13.   return $node
  14.  } 
  15.     
  16.  public function rearAdd($node){ 
  17.   array_push($this->queue,$node); 
  18.   $this->countqueue(); 
  19.  } 
  20.    
  21.  public function rearRemove(){ 
  22.   $node = array_pop($this->queue); 
  23.   $this->countqueue(); 
  24.   return $node
  25.  } 
  26.    
  27.  public function countqueue(){ 
  28.   $this->length = count($this->queue);     
  29.  } 
  30. $fruit = new deque(); 
  31. echo $fruit -> length; 
  32. $fruit -> frontAdd("Apple"); 
  33. $fruit -> rearAdd("Watermelon"); 
  34. echo '<pre>'
  35. print_r($fruit); 
  36. echo '</pre>'
  37. ?> 
  38. /*結果 
  39. 0 
  40. deque Object 
  41. ( 
  42.     [queue] => Array 
  43.         ( 
  44.             [0] => Apple 
  45.             [1] => Watermelon 
  46.         ) 
  47.     [length] => 2 
  48. )*/ 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开远市| 镇安县| 靖州| 水富县| 公安县| 闸北区| 仪陇县| 辽阳县| 百色市| 永康市| 来凤县| 中西区| 呼玛县| 合川市| 石柱| 岑溪市| 武城县| 哈尔滨市| 霸州市| 乌鲁木齐市| 信丰县| 镇沅| 茂名市| 乌拉特前旗| 海城市| 东源县| 大名县| 会昌县| 安福县| 鹤山市| 贞丰县| 昌吉市| 苏尼特右旗| 抚远县| 龙游县| 天柱县| 麟游县| 巨野县| 黄大仙区| 泰宁县| 衡阳县|