//实现基本队列

class Queues

{

private $head;

private $tail;

private $cnt; //数组大小

private $array = [];

public function __construct($n = 5)

{

$this->cnt = $n;

$this->head = 0;

$this->tail = 0;

}

//数组实现队列

public function basisEnQueue($val)

{

//队列已满

if ($this->tail == $this->cnt) {

return false;

}

$this->array[$this->tail] = $val;

$this->tail++;

return true;

}

//出队列

public function basisDelQueue()

{

//队列为空

if ($this->head == $this->tail) {

return false;

}

$ret = $this->array[$this->head];

unset($this->array[$this->head]);

$this->head++;

return $ret;

}

//队列迁移 使用已删除空间

public function migrationEnQueue($val)

{

//队列已满

if ($this->tail == $this->cnt) {

//tail ==n && head==0,表示整个队列都占满了

if ($this->head == 0) {

return false;

}

for ($i = $this->head; $i < $this->tail; $i++) {

$this->array[$i - $this->head] = $this->array[$i];

unset($this->array[$i]);

}

$this->tail = $this->tail - $this->head;

$this->head = 0;

}

$this->array[$this->tail] = $val;

$this->tail++;

return true;

}

}

$q = new Queues();

$q->basisEnQueue('a');

$q->basisEnQueue('b');

$q->basisEnQueue('c');

$q->basisEnQueue('d');

$q->basisEnQueue('f');

$r1 = $q->basisDelQueue();

$r2 = $q->basisDelQueue();

// $q->migrationEnQueue('g');

// var_dump($q);exit;

//循环队列

class CircularQueue

{

private $head;

private $tail;

private $cnt; //数组大小

private $array = [];

public function __construct($n = 5)

{

$this->cnt = $n;

$this->head = 0;

$this->tail = 0;

}

public function enqueue($val)

{

//(tail+1)%n=head 队列满的时候

if (($this->tail + 1) % $this->cnt == $this->head) {

return false;

}

$this->array[$this->tail] = $val;

$this->tail = ($this->tail + 1) % $this->cnt;

return true;

}

public function dequeue()

{

//如果head == tail 表示队列为空

if ($this->head == $this->tali) {

return false;

}

$ret = $this->array[$this->head];

unset($this->array[$this->head]);

$this->head = ($this->head + 1) % $this->cnt;

return $ret;

}

}

$c = new CircularQueue;

$c->enqueue('a');

$c->enqueue('b');

$c->enqueue('c');

var_dump($c);exit;

php 循环队列,队列和循环队列-php数组相关推荐

  1. 循环队列,定义循环队列长度为10,编写初始化队列、入队、出队、求队长,实现10,20,30,40,50,60,70,80入队,10,20,30出队,56,67入队的算法功能。

    循环队列,定义循环队列长度为10,编写初始化队列.入队.出队.求队长,实现10,20,30,40,50,60,70,80入队,10,20,30出队,56,67入队的算法功能. #include< ...

  2. JavaScript的调用栈、回调队列和事件循环

    译者按 这篇文章可以看做是对Philip Roberts 2014年在JSConf演讲的<What the heck is the event loop anyway?>的一个总结. 建议 ...

  3. 《恋上数据结构第1季》队列、双端队列、循环队列、循环双端队列

    队列(Queue) 队列 Queue 队列的接口设计 队列源码 双端队列 Deque 双端队列接口设计 双端队列源码 循环队列 Circle Queue 循环队列实现 索引映射封装 循环队列 – %运 ...

  4. java循环队列_Java版-数据结构-队列(循环队列)

    前情回顾 在上一篇,笔者给大家介绍了数组队列,并且在文末提出了数组队列实现上的劣势,以及带来的性能问题(因为数组队列,在出队的时候,我们往往要将数组中的元素往前挪动一个位置,这个动作的时间复杂度O(n ...

  5. java循环遍历队列_java实现循环队列

    java实现循环队列 循环队列的优点 普通队列出队操作开销大:在出队操作时,索引为0后面的所有元素,都需要往前移动一位,元素越多,消耗的时间也越多,时间复杂度为O(N). 循环队列的逻辑: 1.当元素 ...

  6. 数据结构_队列:从普通队列到循环(circular)队列

    队列:从普通队列到循环队列 队列的定义: 队列(queue)是允许在一端进行插入操作,在另一端进行删除操作的线性表.允许插入的一端称为队尾(rear),允许删除的一端称为队头(front).插入操作称 ...

  7. Java中循环队列实现_Java循环队列的实现方法

    Java循环队列的实现方法 时间:2017-09-13     来源:华清远见JAVA学院 生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题.那 ...

  8. 【数据结构】栈和队列OJ练习(栈和队列相互实现+循环队列实现)

    目录 前言 1.用队列实现栈 2.用栈实现队列 3.循环队列 前言 前面在学习了栈和队列的实现之后,相信大家对栈和队列的结构和使用方式都有了一些理解. 下面我们就来进行一些练习,这这章的练习相对于原来 ...

  9. c语言建立队列(顺序队列、循化队列和链式队列)

    c语言建立队列 一.顺序队列 队列的顺序存储结构 顺序队列的讨论 "下溢"现象 "真上溢"现象 "假上溢"现象 二.如何解决"假上 ...

  10. Python数据结构学习笔记——队列和双端队列

    目录 一.队列的定义 二.队列 实现步骤分析 三.队列的Python实现代码 四.队列的应用 六人传土豆游戏 五.双端队列的定义 六.双端队列 实现步骤分析 七.双端队列的Python实现代码 八.双 ...

最新文章

  1. 苹果新功能惹众怒,4000 多家组织和个人签署公开信,敦促苹果放弃“儿童安全”功能...
  2. 【读书笔记】《第一行代码》
  3. 敏捷项目向组合级看齐
  4. 深入理解spark两种调度模式:FIFO,FAIR模式
  5. elementui el-table根据分页显示表格序号
  6. 微信小程序之获取验证码js
  7. Pytorch基础(九)——损失函数
  8. linux设备驱动之按键外部中断
  9. python tcp多个客户端连接服务器
  10. AcWing479.加分二叉树(区间DP)题解
  11. Win32程序和控制台应用程序的项目互转设置
  12. 为什么年龄大了近视还增加_都是做近视手术,为什么价格区别这么大?
  13. 软件著作权人享有的权利
  14. 雪亮工程整体解决方案
  15. 标题中冒号的用法_如果论文题目中出现冒号,冒号前后两部分内容通常是?
  16. 计算机缺少什么无法正常启动,电脑无法正常启动
  17. 车牌限行C语言雾霾指数,算法设计与程序实现判断车牌的单双号(背景知识)为了保障空气质量,减少雾霾,某市决定当空气污染严重时,实行汽车单双号限行,违反规定的车辆将予以处罚。如何让高清摄像-组卷网...
  18. Linux如何修改网卡ip地址!
  19. 华为HCNA实验操作之常用操作命令32-40
  20. 用Arduino播放音乐

热门文章

  1. 利用PUT方式上传文件的方法研究
  2. android 获取sd卡目录失败_树莓派对SD卡的大小,速度有哪些要求?
  3. 【python】数据结构和算法 + 浅谈单链表与双链表的区别
  4. 查看centos中的用户和用户组
  5. wireshark 十六进制过滤_CTF流量分析之wireshark使用
  6. iphone查看删除的短信_iPhone12发布!刚买的苹果手机短信全部消失了怎么办?
  7. android java adb命令大全,Android adb命令备份恢复手机信息
  8. rabbitmq 安装 linux
  9. 三大类sql语句——该记录是本人以前微博上的文章
  10. Apache 配置:是否显示文件列表