• 队列的实现


    leetcode上的题目,做的有点差,做个记录,以后再做优化,不想用php自带的数组操作函数实现

      1 <?php
      2 
      3 class MyCircularQueue
      4 {
      5     public $arr = [];
      6     public $k = ''; // 总共有几个值
      7     public $needle = 0;  // 针,现在数组的健
      8 
      9     /**
     10      * @param Integer $k
     11      */
     12 
     13     function __construct($k)
     14     {
     15         $this->k = $k;
     16     }
     17 
     18     /**
     19      * 向循环队列插入一个元素。如果成功插入则返回真。
     20      * @param Integer $value
     21      * @return Boolean
     22      */
     23     function enQueue($value)
     24     {
     25         // 存在
     26         if (count($this->arr) >= $this->k) {
     27             return false;
     28         } else {
     29             $this->arr[$this->needle] = $value;
     30 
     31             if($this->needle<$this->k){
     32                 $this->needle++;
     33             }else{
     34                 $this->needle=0;
     35             }
     36             return true;
     37         }
     38     }
     39 
     40     /**
     41      * 从循环队列中删除一个元素。如果成功删除则返回真。
     42      * 做了多次foreach,很lou
     43      * @return Boolean
     44      */
     45     function deQueue()
     46     {
     47         if(!empty($this->arr)){
     48             $i=0;
     49             $arrs=[];
     50             foreach ($this->arr as $arr){
     51                 $arrs[$i]=$arr;
     52                 $i++;
     53             }
     54             $this->arr=$arrs;
     55             unset($this->arr[0]);
     56             --$this->needle;
     57             $s=0;
     58             $temp=[];
     59             foreach ($this->arr as $arr){
     60                 $temp[$s]=$arr;
     61                 $s++;
     62             }
     63             $this->arr=$temp;
     64             return true;
     65         }else{
     66             return false;
     67         }
     68     }
     69 
     70     /**
     71      * 从队首获取元素。如果队列为空,返回 -1 。
     72      * @return Integer
     73      */
     74     function Front()
     75     {
     76         if (count($this->arr)) {
     77             return $this->arr[0];
     78         } else {
     79             return -1;
     80         }
     81     }
     82 
     83     /**
     84      *  获取队尾元素。如果队列为空,返回 -1 。
     85      * @return Integer
     86      */
     87     function Rear()
     88     {
     89         $rear = count($this->arr)-1;
     90 
     91         if (isset($this->arr[$rear])) {
     92             return $this->arr[$rear];
     93         } else {
     94             return -1;
     95         }
     96 
     97     }
     98 
     99     /**
    100      * 检查循环队列是否为空。
    101      * @return Boolean
    102      */
    103     function isEmpty()
    104     {
    105         if (!empty($this->arr)) {
    106             return false;
    107         }else{
    108             return true;
    109         }
    110     }
    111 
    112     /**
    113      * 检查循环队列是否已满。
    114      * @return Boolean
    115      */
    116     function isFull()
    117     {
    118         if(count($this->arr)>=$this->k){
    119             return true;
    120         }else{
    121             return false;
    122         }
    123     }
    124 }
    125 
    126 /**
    127  * Your MyCircularQueue object will be instantiated and called as such:
    128  * $obj = MyCircularQueue($k);
    129  * $ret_1 = $obj->enQueue($value);
    130  * $ret_2 = $obj->deQueue();
    131  * $ret_3 = $obj->Front();
    132  * $ret_4 = $obj->Rear();
    133  * $ret_5 = $obj->isEmpty();
    134  * $ret_6 = $obj->isFull();
    135  */
    136 
    137 $model = new MyCircularQueue(4);
    138 var_dump($model->enQueue(3));
    139 var_dump($model->Front());
    140 var_dump($model->isFull());
    141 var_dump($model->enQueue(7));
    142 var_dump($model->enQueue(2));
    143 var_dump($model->enQueue(5));
    144 var_dump($model->deQueue());
    145 var_dump($model->enQueue(4));
    146 var_dump($model->enQueue(2));
    147 var_dump($model->isEmpty());
    148 var_dump($model->Rear());
    149 
    150 ?>
    一个96年的PHPER
  • 相关阅读:
    input失效后,怎么改变它默认就有的灰色
    弹性盒布局-宽度自动分配-图片自适应
    时钟效果收集
    1秒加1
    tab切换☆☆☆☆☆
    音乐播放的动画效果
    css3-文字旋转
    红黑树
    Ruby2.0后版本的debug工具: byebug
    [转]DSL-让你的 Ruby 代码更优秀
  • 原文地址:https://www.cnblogs.com/zhouxiaohei/p/14844835.html
Copyright © 2020-2023  润新知