新聞中心
如何使用php實現(xiàn)一個雙向隊列的數(shù)據(jù)結(jié)構(gòu)有幾種方式
不建議直接用php來做隊列,php的array操作雖然勉強能做偽隊列,但問題也來了,如果是大量的數(shù)據(jù)呢?php會不會內(nèi)存問題直接掛了?
成都創(chuàng)新互聯(lián)公司服務項目包括利通網(wǎng)站建設(shè)、利通網(wǎng)站制作、利通網(wǎng)頁制作以及利通網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,利通網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到利通省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
建議:測試的話用用還湊合,但真正去用的話雙向隊列,用redis的list類型吧,可以滿足你的需求,同時數(shù)量級上也不是問題,單向隊列
httpsqs,rabbitmq等
再看看別人怎么說的。
數(shù)據(jù)結(jié)構(gòu)算法在php編程中的作用?
數(shù)據(jù)結(jié)構(gòu)是在整個計算機科學與技術(shù)領(lǐng)域上廣泛被使用的術(shù)語。它用來反映一個數(shù)據(jù)的內(nèi)部構(gòu)成,即一個數(shù)據(jù)由那些成分數(shù)據(jù)構(gòu)成,以什么方式構(gòu)成,呈什么結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)有邏輯上的數(shù)據(jù)結(jié)構(gòu)和物理上的數(shù)據(jù)結(jié)構(gòu)之分。邏輯上的數(shù)據(jù)結(jié)構(gòu)反映成分數(shù)據(jù)之間的邏輯關(guān)系,而物理上的數(shù)據(jù)結(jié)構(gòu)反映成分數(shù)據(jù)在計算機內(nèi)部的存儲安排。數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)存在的形式。 數(shù)據(jù)結(jié)構(gòu)是信息的一種組織方式,其目的是為了提高算法的效率,它通常與一組算法的集合相對應,通過這組算法集合可以對數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)進行某種操作。
使用php實現(xiàn)的基本的數(shù)據(jù)結(jié)構(gòu)和算法,什么二叉樹、二叉搜索樹、AVL樹、B樹、鏈表和常見排序、搜索算法等等,而且全部是使用面向?qū)ο髞韺崿F(xiàn)的,確是是很強。
PHP 數(shù)據(jù)結(jié)構(gòu)隊列(SplQueue)和優(yōu)先隊列(SplPriorityQueue)簡單使用實例
隊列這種數(shù)據(jù)結(jié)構(gòu)更簡單,就像我們生活中排隊一樣,它的特性是先進先出(FIFO)。
PHP
SPL中SplQueue類就是實現(xiàn)隊列操作,和棧一樣,它也可以繼承雙鏈表(SplDoublyLinkedList)輕松實現(xiàn)。
SplQueue類摘要如下:
SplQueue簡單使用如下:
復制代碼
代碼如下:
$queue
=
new
SplQueue();
/**
*
可見隊列和雙鏈表的區(qū)別就是IteratorMode改變了而已,棧的IteratorMode只能為:
*
(1)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_KEEP
(默認值,迭代后數(shù)據(jù)保存)
*
(2)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE
(迭代后數(shù)據(jù)刪除)
*/
$queue-setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE);
//SplQueue::enqueue()其實就是
SplDoublyLinkedList::push()
$queue-enqueue('a');
$queue-enqueue('b');
$queue-enqueue('c');
//SplQueue::dequeue()其實就是
SplDoublyLinkedList::shift()
print_r($queue-dequeue());
foreach($queue
as
$item)
{
echo
$item
.
PHP_EOL;
}
print_r($queue);
而優(yōu)先隊列SplPriorityQueue是基于堆(后文介紹)實現(xiàn)的。
SplPriorityQueue的類摘要如下:
SplPriorityQueue簡單使用:
$pq
=
new
SplPriorityQueue();
$pq-insert('a',
10);
$pq-insert('b',
1);
$pq-insert('c',
8);
echo
$pq-count()
.PHP_EOL;
//3
echo
$pq-current()
.
PHP_EOL;
//a
/**
*
設(shè)置元素出隊模式
*
SplPriorityQueue::EXTR_DATA
僅提取值
*
SplPriorityQueue::EXTR_PRIORITY
僅提取優(yōu)先級
*
SplPriorityQueue::EXTR_BOTH
提取數(shù)組包含值和優(yōu)先級
*/
$pq-setExtractFlags(SplPriorityQueue::EXTR_DATA);
while($pq-valid())
{
print_r($pq-current());
//a
c
b
$pq-next();
}
分享名稱:PHP常見的幾種數(shù)據(jù)結(jié)構(gòu) php中的五種數(shù)據(jù)結(jié)構(gòu)
轉(zhuǎn)載來源:http://fisionsoft.com.cn/article/doggpsj.html