zoukankan      html  css  js  c++  java
  • 队列的实现

    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
  • 相关阅读:
    如何避免delete和delete[]的尴尬?
    笔面集锦:判断单链表里面是否有环及相关扩展题(转)
    各排序算法的C++实现与性能测试(转)
    五个好的C语言编程实践
    Reviewboard管理员指南(5.5)—— Permission Groups(重要)
    Jenkins CLI getjob与RoleBased Strategy的那点事
    Reviewboard管理员指南(5.4)—— Default Reviewers(重要)
    Reviewboard管理员指南(4.2)—— Administrator Dashboard
    Maven Nexus admin密码重置的方法
    Reviewboard管理员指南(5.2)—— Access Control(重要)
  • 原文地址:https://www.cnblogs.com/zhouxiaohei/p/14844835.html
Copyright © 2011-2022 走看看