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
- )*/
新聞熱點
疑難解答