標籤:分享 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資料結構之隊列