佇列(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...