算法(一):用数组结构实现固定长度的栈和队列

背景知识:

  1. 栈的特点就是先进后出,队列的特点就是先进先出。栈的一个重要应用场景就是倒序某一个东西,例如字符串等等。

1.使用数组结构实现固定长度的栈:思路比较简单,可以在内部维护一个索引值,通过这个索引值与长度的关系来保证栈结构的长度固定。

<?php
//栈类
class Stack {
    //栈的长度
    private $length;
    //数组结构,用来保存栈的数据
    private $array;
    //内部维护的索引
    private $index;
    
    //初始化
    public function __construct($length)
    {
        $this->length=$length;
        $this->array=[];
        $this->index=0;
    }

    //压入栈的操作
    public function push($value){
        if($this->index>=$this->length){
            return 'the stack is full~';
        }
        $this->array[$this->index++]=$value;
    }

    
    //弹出栈的操作
    public function pop(){
        if($this->index<=0){
            return 'the stack is empty~';
        }
        return $this->array[--$this->index];
    }

    //获取栈顶元素
    public function poll(){
        if($this->index<=0){
            return 'the stack is empty~';
        }
        $index=$this->index-1;
        return $this->array[$index];
    }

    public function isEmpty(){
        return 0==$this->index;
    }
}

2.使用数组结构实现固定长度的队列:思路:准备两个索引start和end,当入队时end移动,当出队时start移动,再准备一个size变量用来保存队列的当前长度。(注意:end和start的值是不断从0--length-1变化的

<?php


class Queue{

    private $length;
    private $start;
    private $end;
    private $size;
    private $array;

    public function __construct($length)
    {
        $this->length=$length;
        $this->start=0;
        $this->end=0;
        $this->size=0;
        $this->array=[];
    }

    //入队
    public function push($value){
        if($this->size>=$this->length){
            return 'the queue is full~';
        }
        $this->size++;
        $this->array[$this->end]=$value;
        //如果end大于等于最大索引值之后重新置为0
        $this->end=$this->end>=$this->length-1?0:$this->end+1;
    }

    //出队
    public function pop(){
        if($this->size<=0){
            return 'the queue is empty~';
        }
        $this->size--;
        $result=$this->array[$this->start];
        //如果start大于等于最大索引值之后重新置为0
        $this->start=$this->start>=$this->length-1?0:$this->start+1;
        return $result;
    }
}

$queue=new Queue(10);
$queue->push(12);
$queue->push(14);
var_dump($queue->pop());
var_dump($queue->pop());

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值