﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>花太香齐的博客 &#187; 双向队列</title>
	<atom:link href="http://www.ieliwb.com/tag/%e5%8f%8c%e5%90%91%e9%98%9f%e5%88%97/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ieliwb.com</link>
	<description>灵感的来临，没有任何预兆；灵感的消失，也不会有告别仪式；用文字记下她们吧，让灵感永存……</description>
	<lastBuildDate>Sun, 21 Nov 2010 03:36:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>用PHP实现一个双向队列-貌似是腾讯的一道笔试题</title>
		<link>http://www.ieliwb.com/php-push-pop/</link>
		<comments>http://www.ieliwb.com/php-push-pop/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 12:48:10 +0000</pubDate>
		<dc:creator>花太香齐</dc:creator>
				<category><![CDATA[PHP/WEB]]></category>
		<category><![CDATA[双向队列]]></category>
		<category><![CDATA[腾讯]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=140</guid>
		<description><![CDATA[<p>用PHP实现一个双向队列-腾讯笔试题？</p>
<blockquote><p>队列只能对头尾两个元素操作<br />
单向队列只能从头进，从尾出<br />
双向队列则头尾均可push,pop </p></blockquote>
<p>baidu和google上没有查到PHP双向队列的资料，搜索到java的双向队列定义如下：双向队列（双端队列）就像是一个队列，但是你可以在任何一端添加或移除元素。<br />
而[......]</p><p class='read-more'><a href='http://www.ieliwb.com/php-push-pop/'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>用PHP实现一个双向队列-腾讯笔试题？</p>
<blockquote><p>队列只能对头尾两个元素操作<br />
单向队列只能从头进，从尾出<br />
双向队列则头尾均可push,pop </p></blockquote>
<p>baidu和google上没有查到PHP双向队列的资料，搜索到java的双向队列定义如下：双向队列（双端队列）就像是一个队列，但是你可以在任何一端添加或移除元素。<br />
而双端队列是一种数据结构，定义如下：<br />
A deque is a data structure consisting of a list of items, on which the following operations are possible.<br />
* push(D,X) — insert item X on the rear end of deque D.<br />
* pop(D) — remove the front item from the deque D and return it.<br />
* inject(D,X) — insert item X on the front end of deque D.<br />
* eject(D) — remove the rear item from the deque D and return it.<br />
Write routines to support the deque that take O(1) time per operation. </p>
<p>翻译：双端队列（deque）是由一些项的表组成的数据结构，对该数据结构可以进行下列操作：<br />
push(D,X) 将项X 插入到双端队列D的前端<br />
pop(D) 从双端队列D中删除前端项并将其返回<br />
inject(D,X) 将项X插入到双端队列D的尾端<br />
eject(D) 从双端队列D中删除尾端项并将其返回<br />
编写支持双端队伍的例程，每种操作均花费O（1）时间</p>
<p>百度百科：（deque，全名double-ended queue）是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出，其限定插入和删除操作在表的两端进行。</p>
<p>附我的解答程序：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"> <br />&nbsp; <br /></span><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">DoubleQueue</span><span style="color: Gray;">&nbsp; <br /></span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: #00008b;">$queue</span><span style="color: Gray;"> = </span><span style="color: Green;">array</span><span style="color: Olive;">()</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: #ffa500;">/**（尾部）入队&nbsp; **/</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">push</span><span style="color: Olive;">(</span><span style="color: #00008b;">$value</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Blue;">array_push</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">queue</span><span style="color: Gray;">,</span><span style="color: #00008b;">$value</span><span style="color: Olive;">)</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: #ffa500;">/**（尾部）出队**/</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">pop</span><span style="color: Olive;">()</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Blue;">array_pop</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">queue</span><span style="color: Olive;">)</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: #ffa500;">/**（头部）入队**/</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">enq</span><span style="color: Olive;">(</span><span style="color: #00008b;">$value</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Blue;">array_unshift</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">queue</span><span style="color: Gray;">,</span><span style="color: #00008b;">$value</span><span style="color: Olive;">)</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: #ffa500;">/**（头部）出队**/</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">deq</span><span style="color: Olive;">()</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Blue;">array_shift</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">queue</span><span style="color: Olive;">)</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: #ffa500;">/**清空队列**/</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">makeEmpty</span><span style="color: Olive;">()</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">unset</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">queue</span><span style="color: Olive;">)</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp; <br /></span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp; <br /></span><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">DoubleDueue</span><span style="color: Gray;">&nbsp; <br /></span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: #00008b;">$queue</span><span style="color: Gray;"> = </span><span style="color: Green;">array</span><span style="color: Olive;">()</span><span style="color: Gray;">; <br />&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">push</span><span style="color: Olive;">(</span><span style="color: #00008b;">$value</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">queue</span><span style="color: Olive;">[]</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$value</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">pop</span><span style="color: Olive;">()</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$count</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">count</span><span style="color: Olive;">()</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: #00008b;">$count</span><span style="color: Gray;"> &gt;= </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$value</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">queue</span><span style="color: Olive;">[</span><span style="color: #00008b;">$count</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">unset</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">queue</span><span style="color: Olive;">[</span><span style="color: #00008b;">$count</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Olive;">])</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: #00008b;">$value</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">enq</span><span style="color: Olive;">(</span><span style="color: #00008b;">$value</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #ffa500;">/*不好做*/</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">deq</span><span style="color: Olive;">()</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #ffa500;">/*不好做*/</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">count</span><span style="color: Olive;">()</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Blue;">count</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">queue</span><span style="color: Olive;">)</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">makeEmpty</span><span style="color: Olive;">()</span><span style="color: Gray;">&nbsp; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;"> <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">unset</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">queue</span><span style="color: Olive;">)</span><span style="color: Gray;">; <br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> <br /></span><span style="color: Olive;">}</span><span style="color: Gray;"> <br />&nbsp; <br />&nbsp; <br /></span><span style="color: Blue;">?&gt;</span></div></div>
<p>貌似可以用php的四个函数解决：</p>
<blockquote><p>
array_push — 将一个或多个单元压入数组的末尾（入栈）<br />
array_unshift — 在数组开头插入一个或多个单元<br />
array_pop — 将数组最后一个单元弹出（出栈）<br />
array_shift — 将数组开头的单元移出数组
</p></blockquote>
<p>参考资料：</p>
<p>http://www.hiahia.org/datastructure/zhanhuoduilie/zhanhuoduilie3.2.1.htm</p>
<p>http://phpcup.cn/viewthread.php?tid=366</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ieliwb.com/php-push-pop/feed/</wfw:commentRss>
		<slash:comments>1370</slash:comments>
		</item>
	</channel>
</rss>

