淺談PHP資料結構之隊列

來源:互聯網
上載者:User

標籤:分享   get   版本號碼   線性   aik   成員   blog   使用   結構   

隊列

隊列是一種特殊的線性表,特殊之處在於它僅僅同意在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

隊列的資料元素又稱為隊列元素。在隊列中插入一個隊列元素稱為入隊。從隊列中刪除一個隊列元素成為出隊。由於隊列僅僅同意在一段插入。在還有一端刪除,所以僅僅有最早進入隊列的元素才幹最先從隊列中刪除,故隊列又稱為先進先出(FIFO—first in first out)線性表。


在PHP中,隊列經經常使用來做訊息佇列和任務隊列等,是一個很實用的機構。小弟初學。這裡簡單的介紹下隊列的基本結構和操作。


1.順尋隊列

PHP中的順序隊列很easy,簡單的幾行就行實現。

<?

php

class Queue{

private $Que=array();

//入隊

public function Enqueue($data){

return array_push($this->Que,$data);

}

//出隊

public function DelQue(){

return array_shift($this->Que);

}

}

>

這樣就簡單的實現了PHP版本號碼的順序隊列。


2.鏈式隊列

鏈式隊列屬於經常使用隊列,這裡我簡單的寫了一下鏈式隊列的構造方法和基本操作:

<?php
//定義鏈式隊列的成員
class Qnode{
public $data;//成員資料
public $next;//指向下一成員
public $id;//成員id
    public function __construct($data=NULL,$next=NULL,$id=0){
        $this->data=$data;
        $this->next=$next;
        $this->id=$id;
}
}
//定義隊列
class LinkQueue{
    private $front;//隊頭
    private $rear;//隊尾
    public function __construct(){
        $this->front=new Qnode($data=NULL,$next=NULL,$id=0);
        $this->rear=$this->front;
    }
    //定義入隊
    public function EnQueue($data){
        $front=$this->front;
        $q = new Qnode($data,NULL,$this->rear->id+1);
        $this->rear->next=$q;
        $this->rear=$q;
    }
    //出隊
    public function DelQueue(){
        $temp=$this->front->next->data;
        $this->front=$this->front->next;
        $this->front->data=NULL;
        return $temp;
    }
    //擷取隊列長度
    public function GetLength(){
        return ($this->rear->id-$this->front->id);
    }
    //擷取隊列
    public function GetLinkQueue(){
        $front=$this->front;
        while($front != $this->rear){
            $front=$front->next;
            echo ‘第‘.$front->id.‘個成員為‘.$front->data.‘<br>‘;
        }
    }
}

$a =new LinkQueue;
$a->Enqueue(‘a‘);
$a->Enqueue(‘b‘);
$a->Enqueue(‘c‘);
$a->Enqueue(‘d‘);
$a->Enqueue(3);
echo ‘出隊曾經總共同擁有‘.$a->GetLength().‘個隊員<br>‘;
echo $a->DelQueue().‘運行出隊以後<br>‘;
echo $a->GetLinkQueue();
echo ‘一共剩餘‘.$a->GetLength().‘個隊員‘;
?>

最後幾行為測試代碼。下面是結果:

希望能夠協助大家理解鏈表結構,小弟初學,要是有地方寫的不夠透徹,希望大家多多包括。

淺談PHP資料結構之隊列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.