PHP佇列的實現,看完秒懂

2021-09-13 02:35:55 字數 1904 閱讀 7934

佇列是一種特殊的線性表,它只允許在表的前端,可以稱之為front,進行刪除操作;而在表的後端,可以稱之為rear進行插入操作。佇列和堆疊一樣,是一種操作受限制的線性表,和堆疊不同之處在於:佇列是遵循「先進先出」原則,而堆疊遵循的是「先進後出」原則。佇列進行插入操作的端稱為隊尾,進行刪除操作的稱為隊頭,只允許在隊尾進行插入操作,在隊頭進行刪除操作。

佇列的資料元素又稱為佇列元素,在隊尾中插入乙個元素稱為入隊,在隊頭刪除乙個元素稱為出隊。具體實現參考**:

class data 

public function getdata()

public function __destruct()

}class queue

//初始化佇列

private function initq($size)

//判斷隊空

public function qisempty()

//判斷隊滿

public function qisfull()

//獲取隊首資料

public function getfrontdate()

//入隊

public function inq($data)

$this->queue[$this->rear+1]=new data($data);

//print_r($this->queue);

//echo $this->front;

echo '入隊成功!

'; }

} //出隊

public function outq()

}}$q=new queue(3);

$q->inq("小苗");

$q->inq('馬帥');

$q->inq('溜冰');

$q->inq('張世佳');

$q->outq();

$q->inq("周瑞曉");

$q->outq();

$q->outq();

$q->outq();

$q->outq();

本案例中有兩個類:

第乙個是data類,用於實現資料的存放以及佇列元素的入隊出隊情況;

第二個是queue類,用於佇列元素的一些入隊出隊操作。

佇列中包含四個屬性:

front(佇列的頭部)

rear(佇列的尾部)

maxsize(佇列的長度,即佇列元素個數)

queue(存放所有已入隊佇列元素的物件)

場景說明:

1.初始化佇列時,生成乙個佇列,傳入乙個引數作為maxsize初始化佇列把隊尾rear設為0,隊頭front也設為0,此時queue中只有0號元素,並且rear和front都指向它。

2.入隊時,先需要判斷佇列是否已滿(front-rear == maxsize),如果已滿不可在插入,如果未滿則允許插入。插入時,front自增,然後依次讓佇列所有元素向前移動一位(讓出隊尾位置以便插入新元素),然後生成新的data物件插入到隊尾位置。

3.出隊時,判斷佇列是否為空(front == rear),如果為空時,無法出隊。如果不為空時,刪除front指向的物件,並且front自減,完成出隊。

執行結果如下:

小苗:哥進隊了!

入隊成功

馬帥:哥進隊了!

入隊成功

溜冰:哥進隊了!

入隊成功

張世佳:我一來咋就滿了!(隊滿不能入隊,請等待!)

小苗:哥走了!

出隊成功!

周瑞曉:哥進隊了!

入隊成功

馬帥:哥走了!

出隊成功!

溜冰:哥走了!

出隊成功!

周瑞曉:哥走了!

出隊成功!

隊空不能出隊!

隊空不能出隊!

看完絕對懂的IFC

ifc inline formatting context 行內格式化上下文。與塊級元素形成對比,當元素的 css 屬性 display 的計算值為 inline,inline block,inline table,inline flex 或 inline grid 時,它是行內級元素。視覺上它將內...

php 命名空間詳細介紹,看完就懂

php的命名空間 namespace 是php5.3之後才有的。這個概念在c 中已經很早就有了,php中的namespace其實和c 的概念是一樣的。假設如果不使用namespace,那麼每個類在乙個專案中的名字就必須是固定的。因為php在new的時候不管是呼叫autoload還是呼叫已載入過的類,...

Android熱修復(簡單實現,秒懂)

花了兩天時間研究了一下熱修復,簡單的實現了一下,至於原理,大家可以檢視一下網上的資料,很詳細,並且不難,看一遍就懂,這裡就簡單介紹下如何實現,廢話不說,直接搞起。第一步 把有問題修復好的類打成dex包。1.1 找到dx.bat的目錄,配置下環境變數,配置完環境變數需要關閉cmd在開啟cmd就可以了。...