队列的实现

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 ?>

 

posted @ 2021-06-03 13:44  周小黑  阅读(42)  评论(0编辑  收藏  举报