原生PHP實現佇列與棧

2021-07-09 03:02:32 字數 1808 閱讀 5199

佇列(queue)是常用的資料結構之一,它是一種特殊的線性表,受到操作的限制,只能在尾部進行插入操作,在頭部進行刪除操作。

佇列遵循先入先出(fifo,first in first out)的原則,每乙個新插入的元素都是在佇列的尾部插入,每乙個要刪除的元素都是位於佇列的頭部,當從佇列的頭部刪除了乙個元素後,其它佇列中的元素就會向前進1位,在元素移動到隊首時,就會接受出隊的操作。

還有一種佇列比較特殊,首尾兩端都允許進行插入和刪除的操作,這種佇列可以稱為雙端佇列,與標準的佇列不同的就是多了隊首的插入操作和隊尾的刪除操作。

原生php的陣列就可以用來實現佇列操作,乙個佇列所需要實現的基本操作如下所示:

隊尾入隊

隊首出隊

佇列元素統計

取隊首元素

取隊尾元素

清空佇列

隊尾出隊(僅用於雙端佇列)

隊首入隊(僅用於雙端佇列)

實現乙個佇列操作的類,稱為queueop.class.php,如下所示:

<?php 

/* * php實現佇列操作類

*/class

queueop

/** 隊尾出隊

* return:最後乙個值,如果陣列為空或不是陣列,返回null

* comment:僅用於雙向佇列

*/public

function

taildequeue

($arr)

/** 隊首入隊

* return:處理之後佇列的元素個數

* comment:僅用於雙向佇列

*/public

function

headenqueue

($arr,$val)

/** 隊首出隊

* return:移出的值,如果引數不是陣列或陣列為空,返回null

*/public

function

headdequeue

($arr)

/** 佇列長度

* return:返回佇列的長度(元素個數)

*/public

function

queuelength

($arr)

/** 獲取隊首元素

* return:第乙個元素的值,如果隊列為空則返回false

*/public

function

queuehead

($arr)

/** 獲取隊尾元素

* return:最後乙個元素的值,如果隊列為空則返回false

*/public

function

queuetail

($arr)

/** 清空佇列

* return:無返回值

*/public

function

clearqueue

($arr)

}

棧(stack)與佇列相似,都是操作受到了限制的表,不同的是棧實行的是先入後出的原則,先進入的元素會被壓到棧底,後進入的元素位於棧頂,棧只會對棧頂一端的元素進行操作,棧的操作包括入棧和出棧,都是從棧頂端進行操作。

php實現棧與實現佇列極其相似,了解了棧的原理之後,只需要將佇列部份的類實現**去除佇列頭部的插入與刪除操作,即可成為棧的操作類,只需將隊尾換成棧頂,隊首換成棧底即可。

佇列實現棧棧實現佇列

佇列是一種先進先出的資料結構,要想實現先進後出,需加乙個輔助佇列進行資料的來回倒 引用交換 從而實現棧結構。例如 5 4 3 2 1 用乙個輔助佇列裝 4 3 2 1,把5彈出,在把 4 3 2 1放回原佇列,如此反覆可變成5 4 3 2 1的棧結構。棧是一種先進後出的資料結構,要想實現先進先出,同...

佇列實現棧,棧實現佇列

兩個佇列實現棧 每次進入乙個佇列,取出得時候,把所有元素進入另乙個佇列,只留下乙個元素,以此實現棧的先進後出 filo package algorithmbymyself import j a.util.linkedlist import j a.util.queue 用兩個佇列實現乙個棧 publ...

棧與佇列的實現

利用順序表實現棧 include include include include typedef struct position position typedef int sdatatype define max size 100 typedef struct stack stack 初始化 voi...