php实现的双向队列类实例__3.docx

上传人:啊飒飒 文档编号:11646283 上传时间:2021-08-27 格式:DOCX 页数:6 大小:13.14KB
返回 下载 相关 举报
php实现的双向队列类实例__3.docx_第1页
第1页 / 共6页
php实现的双向队列类实例__3.docx_第2页
第2页 / 共6页
php实现的双向队列类实例__3.docx_第3页
第3页 / 共6页
php实现的双向队列类实例__3.docx_第4页
第4页 / 共6页
php实现的双向队列类实例__3.docx_第5页
第5页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《php实现的双向队列类实例__3.docx》由会员分享,可在线阅读,更多相关《php实现的双向队列类实例__3.docx(6页珍藏版)》请在三一文库上搜索。

1、php实现的双向队列类实例_ 本文实例讲解并描述了php实现的双向队列类及其用法,对于PHP数据结构与算法的学习有不错的参考价值。分享给大家供大家参考。具体分析如下: (deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构。双向队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。 在实际用法中,还可以有输出受限的双向队列(即一个端点允许插入和删除,另一个端点只允许插入的双向队列)和输入受限的双向队列(即一个端点允许插入和删除,另一个端点只允许删除的双向队列)。而假如限定双向队列从某个端点插入的元素只能从该端点删除,则该双向队列就蜕变为两个栈底相邻

2、的栈了。 DEQue.class.php类文件如下: ?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912021112212312412512612

3、7128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199202101202203 ?php /* php 双向队列。支持限定队列长度,输入受限,输出受限,及输出必需与输入同端几种设置 * Date: 2021-04-30

4、* Author: fdipzone * Ver: 1.0 * * Func: * public frontAdd 前端入列 * public frontRemove 前端出列 * public rearAdd 后端入列 * pulbic rearRemove 后端出列 * public clear 清空对列 * public isFull 推断对列是否已满 * private getLength 猎取对列长度 * private setAddNum 记录入列,输出依靠输入时调用 * private setRemoveNum 记录出列,输出依靠输入时调用 * private checkRemo

5、ve 检查是否输出依靠输入 */ class DEQue / class start private $_queue = array(); / 对列 private $_maxLength = 0; / 对列最大长度,0表示不限 private $_type = 0; / 对列类型 private $_frontNum = 0; / 前端插入的数量 private $_rearNum = 0; / 后端插入的数量 /* 初始化 * param $type 对列类型 * 1:两端均可输入输出 * 2:前端只能输入,后端可输入输出 * 3:前端只能输出,后端可输入输出 * 4:后端只能输入,前端可

6、输入输出 * 5:后端只能输出,前端可输入输出 * 6:两端均可输入输出,在哪端输入只能从哪端输出 * param $maxlength 对列最大长度 */ public function _construct($type=1, $maxlength=0) $this-_type = in_array($type, array(1,2,3,4,5,6)? $type : 1; $this-_maxLength = intval($maxlength); /* 前端入列 * param Mixed $data 数据 * return boolean */ public function fron

7、tAdd($data=null) if($this-_type=3) / 前端输入限制 return false; if(isset($data) !$this-isFull() array_unshift($this-_queue, $data); $this-setAddNum(1); return true; return false; /* 前端出列 * return Array */ public function frontRemove() if($this-_type=2) / 前端输出限制 return null; if(!$this-checkRemove(1) / 检查是否

8、依靠输入 return null; $data = null; if($this-getLength()0) $data = array_shift($this-_queue); $this-setRemoveNum(1); return $data; /* 后端入列 * param Mixed $data 数据 * return boolean */ public function rearAdd($data=null) if($this-_type=5) / 后端输入限制 return false; if(isset($data) !$this-isFull() array_push($t

9、his-_queue, $data); $this-setAddNum(2); return true; return false; /* 后端出列 * return Array */ public function rearRemove() if($this-_type=4) / 后端输出限制 return null; if(!$this-checkRemove(2) / 检查是否依靠输入 return null; $data = null; if($this-getLength()0) $data = array_pop($this-_queue); $this-setRemoveNum(

10、2); return $data; /* 清空对列 * return boolean */ public function clear() $this-_queue = array(); $this-_frontNum = 0; $this-_rearNum = 0; return true; /* 推断对列是否已满 * return boolean */ public function isFull() $bIsFull = false; if($this-_maxLength!=0 $this-_maxLength=$this-getLength() $bIsFull = true; re

11、turn $bIsFull; /* 猎取当前对列长度 * return int */ private function getLength() return count($this-_queue); /* 记录入列,输出依靠输入时调用 * param int $endpoint 端点 1:front 2:rear */ private function setAddNum($endpoint) if($this-_type=6) if($endpoint=1) $this-_frontNum +; else $this-_rearNum +; /* 记录出列,输出依靠输入时调用 * param

12、 int $endpoint 端点 1:front 2:rear */ private function setRemoveNum($endpoint) if($this-_type=6) if($endpoint=1) $this-_frontNum -; else $this-_rearNum -; /* 检查是否输出依靠输入 * param int $endpoint 端点 1:front 2:rear */ private function checkRemove($endpoint) if($this-_type=6) if($endpoint=1) return $this-_fr

13、ontNum0; else return $this-_rearNum0; return true; / class end ? demo.php示例代码如下: ?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 ?php require DEQue.class.php; / 例子1 $obj = new DEQue(); / 前后端都可以输入,无限长度 $obj-frontAdd(a); / 前端入列 $obj-rearAdd(b);

14、/ 后端入列 $obj-frontAdd(c); / 前端入列 $obj-rearAdd(d); / 后端入列 / 入列后数组应为 cabd $result = array(); $result = $obj-rearRemove(); / 后端出列 $result = $obj-rearRemove(); / 后端出列 $result = $obj-frontRemove(); / 前端出列 $result = $obj-frontRemove(); / 前端出列 print_r($result); / 出列挨次应为 dbca / 例子2 $obj = new DEQue(3, 5); /

15、前端只能输出,后端可输入输出,最大长度5 $insert = array(); $insert = $obj-rearAdd(a); $insert = $obj-rearAdd(b); $insert = $obj-frontAdd(c); / 因前端只能输出,因此这里会返回false $insert = $obj-rearAdd(d); $insert = $obj-rearAdd(e); $insert = $obj-rearAdd(f); $insert = $obj-rearAdd(g); / 超过长度,返回false var_dump($insert); / 例子3 $obj =

16、new DEQue(6); / 输出依靠输入 $obj-frontAdd(a); $obj-frontAdd(b); $obj-frontAdd(c); $obj-rearAdd(d); $result = array(); $result = $obj-rearRemove(); $result = $obj-rearRemove(); / 由于输出依靠输入,这个会返回NULL $result = $obj-frontRemove(); $result = $obj-frontRemove(); $result = $obj-frontRemove(); var_dump($result); ? 更多信息请查看IT技术专栏 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1