雙端隊列(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 ) |