zoukankan      html  css  js  c++  java
  • 队列

    转载地址

    https://www.cnblogs.com/be-thebest/p/9983672.html

    https://www.jb51.net/article/127318.htm

    <?php
    /**
    * php队列算法
    *
    * Create On 2010-6-4
    * Author Been
    * QQ:281443751
    * Email:binbin1129@126.com
    **/
    class data {
    //数据
    private $data;

    public function __construct($data){
    $this->data=$data;
    echo $data.":哥进队了!<br>";
    }

    public function getData(){
    return $this->data;
    }
    public function __destruct(){
    echo $this->data.":哥走了!<br>";
    }
    }
    class queue{
    protected $front;//队头
    protected $rear;//队尾
    protected $queue=array('0'=>'队尾');//存储队列
    protected $maxsize;//最大数

    public function __construct($size){
    $this->initQ($size);
    }
    //初始化队列
    private function initQ($size){
    $this->front=0;
    $this->rear=0;
    $this->maxsize=$size;
    }
    //判断队空
    public function QIsEmpty(){
    return $this->front==$this->rear;
    }
    //判断队满
    public function QIsFull(){
    return ($this->front-$this->rear)==$this->maxsize;
    }
    //获取队首数据
    public function getFrontDate(){
    return $this->queue[$this->front]->getData();
    }
    //入队
    public function InQ($data){
    if($this->QIsFull())echo $data.":我一来咋就满了!(队满不能入队,请等待!)<br>";
    else {
    $this->front++;
    for($i=$this->front;$i>$this->rear;$i--){
    //echo $data;
    if($this->queue[$i])unset($this->queue[$i]);
    $this->queue[$i]=$this->queue[$i-1];
    }
    $this->queue[$this->rear+1]=new data($data);
    //print_r($this->queue);
    //echo $this->front;
    echo '入队成功!<br>';
    }
    }
    //出队
    public function OutQ(){
    if($this->QIsEmpty())echo "队空不能出队!<br>";
    else{
    unset($this->queue[$this->front]);
    $this->front--;
    //print_r($this->queue);
    //echo $this->front;
    echo "出队成功!<br>";
    }
    }
    }
    $q=new queue(3);
    $q->InQ("小苗");
    $q->InQ('马帅');
    $q->InQ('溜冰');
    $q->InQ('张世佳');
    $q->OutQ();
    $q->InQ("周瑞晓");
    $q->OutQ();
    $q->OutQ();
    $q->OutQ();
    $q->OutQ();

    本案例中有两个类:

      第一个是data类,用于实现数据的存放以及队列元素的入队出队情况;

      第二个是queue类,用于队列元素的一些入队出队操作。

    队列中包含四个属性:

      front(队列的头部)

      rear(队列的尾部)

      maxsize(队列的长度,即队列元素个数)

      queue(存放所有已入队队列元素的对象)

    场景说明:

    1.初始化队列时,生成一个队列,传入一个参数作为maxsize初始化队列把队尾rear设为0,队头front也设为0,此时queue中只有0号元素,并且rear和front都指向它。

    2.入队时,先需要判断队列是否已满(front-rear == maxsize),如果已满不可在插入,如果未满则允许插入。插入时,front自增,然后依次让队列所有元素向前移动一位(让出队尾位置以便插入新元素),然后生成新的data对象插入到队尾位置。

    3.出队时,判断队列是否为空(front == rear),如果为空时,无法出队。如果不为空时,删除front指向的对象,并且front自减,完成出队。

  • 相关阅读:
    Python中所有的关键字
    关于selenium的8种元素定位
    对提示框的操作
    selenium+webservice进行百度登录
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled...报错解决
    Vue中使用echarts
    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142解决方法
    插入排序
    冒泡排序优化
    roject 'org.springframework.boot:spring-boot-starter-parent:XXX' not found 解决
  • 原文地址:https://www.cnblogs.com/gzyx1988/p/13512978.html
Copyright © 2011-2022 走看看