php2个栈写一个队列,PHP实现栈与队列的代码实例

栈:后进先出、先进后出

队列:先进先出,后进后出

下面我们使用PHP来实现一下:

栈class Stack{

private $_list;

public function __construct(){

$this->_list=[];

}

public function append($item){

array_push($this->_list,$item);

return sizeof($this->_list);

}

public function pop(){

return array_pop($this->_list);

}

public function list(){

return $this->_list;

}

public function is_empty(){

return empty($this->_list)?true:false;

}

public function length(){

return sizeof($this->_list);

}

}

$stack=new Stack();

$stack->append(12);

$stack->append(13);

$stack->append(14);

$stack->append(15);

print_r($stack->list());

print_r($stack->append(19));

print_r($stack->list());

var_dump($stack->is_empty());

var_dump($stack->length());

var_dump($stack->pop());

var_dump($stack->pop());

var_dump($stack->pop());

var_dump($stack->pop());

队列

class Queue{

private $_list;

public function __construct(){

$this->_list=[];

}

public function append($item){

array_push($this->_list,$item);

return sizeof($this->_list);

}

public function pop(){

//return array_shift($this->_list);

return array_splice($this->_list,0,1);

}

/**

* 在哪里插入一个数据

* [insert description]

* @param  [type] $index index 位置

* @param  [type] $item  插入的元素

* @return [type]        [description]

*/

public function insert($index,$item){

array_splice($this->_list,$index,0,$item);

}

public function list(){

return $this->_list;

}

public function is_empty(){

return empty($this->_list)?true:false;

}

public function length(){

return sizeof($this->_list);

}

}

$stack=new Queue();

$stack->append(12);

$stack->append(13);

$stack->append(14);

$stack->append(15);

print_r($stack->list());

print_r($stack->insert(1,19));

print_r($stack->list());

exit;

var_dump($stack->length());

var_dump($stack->pop());

print_r($stack->list());

var_dump($stack->pop());

print_r($stack->list());

var_dump($stack->pop());

print_r($stack->list());

var_dump($stack->is_empty());

var_dump($stack->length());

var_dump($stack->pop());

var_dump($stack->pop());

var_dump($stack->pop());

队列中核心方法:

list() 返回列表中元素的个数

append($item) 添加一个元素

pop() 抛出一个元素

insert($index,$item) 在指定位置添加一个元素

is_empty() 判断元素是否为空

length()  返回列表中元素的个数

核心道理:由于项目是php的,就使用php中提供的数组去实现。

队列:先进先出,后进后出,意思:一头进,另一头出。 array_push() , array_shift()

栈:后进先出,意思:从一头进一头出,犹如接水,后来流进来的水,先被喝到。

array_push() 进  array_pop() 这样就实现了栈。

说:为什么当数组很大的时候,array_pop 很快  array_shift 很慢? 这是时间复杂度的影响。

对,就是array_shift操作后,数组的键值变了。这就是array_shift为什么慢的原因了。因为array_shift操作数组会对数字键值,重新从0开始重建。

每次移出一个元素后,就得遍历数组中的所有元素。array_pop就不会了。一个是O(1),一个是O(n)的复杂度,数组大了之后,效果就很明显了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值