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