微信扫一扫打赏支持

php数据结构课程---7、队列实战

php数据结构课程---7、队列实战

一、总结

一句话总结:

注意条件:注意循环的条件(比如while循环打印队列元素时),注意if的条件
把问题想清楚:比如链表操作初次插入元素和后面再插,效果是不一样的,要分清楚

 

1、php创建数组的方法?

$queue1=array(); 而不是 new Array(),也就是要注意php里面的对象化编程程度
$queue1=[];

 

2、php中$arr.array_push()这样的方式使用函数对么?

不对,这是js中的使用方式(对象使用方法),php中为:array_push($arr,1);

 

3、php中array_unshift函数的作用是在数组前面去掉一个元素么?

不是,array_unshift是在数组开头插入一个或多个单元

 

4、php中的array_shift【将数组开头的单元移出数组】需要参数么?

肯定需要将数组传进去啊,不比js的对象.方法 这样的模式

 

5、php中的__get()和__set()如何使用?

不可取时自动调用:当试图获取一个不可达变量时,类会自动调用__get。同样的,当试图设置一个不可达变量时,类会自动调用__set。
所以需要在类中添加__get()和__set()
public function __set($name, $value)
{
    $this->$name = $value;
}

public function __get($name)
{
    return $this->$name;
}

 

 

6、php中的__get()和__set()使用实例?

不可取时自动调用:当试图获取一个不可达变量时,类会自动调用__get。同样的,当试图设置一个不可达变量时,类会自动调用__set。
所以需要在类中添加__get()和__set()
class Node{
    private $data;
    private $next;
    public function __construct($data=null,$next=null){
        $this->data=$data;
        $this->next=$next;
        echo '创建Node对象成功!!<br>';
        echo $this->data.'-构造变量成功-<br>';
        echo $this->next.'-构造变量成功-<br>';
    }
    public function __set($name, $value)
    {
        $this->$name = $value;
    }

    public function __get($name)
    {
        return $this->$name;
    }
}

$queue2=new Node('3',2);
echo '正在获取Node对象的私有变量<br>';
echo $queue2->data.'<br>'; //结果3
echo $queue2->next.'<br>'; //结果2
$queue2->parent='aa';
echo $queue2->parent.'<br>'; //结果aa

结果:
创建Node对象成功!!
3-构造变量成功-
2-构造变量成功-
正在获取Node对象的私有变量
3
2
aa

 

 

7、php中如何销毁对象?

unset($a);

 

 

 

二、内容在总结中

1、截图

 

 

 

2、代码(php)

<?php
//队列的数组实现
$queue1=array();

//队列操作
array_push($queue1,1);
array_push($queue1,2);
array_push($queue1,3);
array_push($queue1,4);
echo '队列的数组实现方式:<br>';
$value=array_shift($queue1);
echo $value.'<br>';
$value=array_shift($queue1);
echo $value.'<br>';

//队列的链表实现
class Node{
    private $data;
    private $next;
    public function __construct($data=null,$next=null){
        $this->data=$data;
        $this->next=$next;
    }
    public function __set($name, $value)
    {
        $this->$name = $value;
    }

    public function __get($name)
    {
        return $this->$name;
    }
}

class QueueList{
    private $head;
    private $tail;
    private $node_num;
    public function __construct($head=null,$tail=null,$node_num=0){
        $this->head=$head;
        $this->tail=$tail;
        $this->node_num=$node_num;
    }
    //入队操作
    public function push($value){
        $node=new Node($value,null);
        if(intval($this->node_num)<=0){
            $this->head=$node;
            $this->tail=$node;
        }else{
            $this->tail->next=$node;
            $this->tail=$node;
        }
        $this->node_num+=1;
    }

    //出队操作
    public function shift(){
        if(intval($this->node_num)<1){
            echo '队列中已经没有元素了<br>';
        }else{
            $node_no=$this->head;
            $this->head=$this->head->next;
            $this->node_num-=1;
            return $node_no->data;
            //unset($node_no);
        }
    }

    //打印队列中的元素
    public function print_queue(){
        if(intval($this->node_num)<1){
            echo '当前队列中没有元素<br>';
            return ;
        }
        echo "当前队列中的元素有{$this->node_num}个,分别为:<br>";
        $bianli=$this->head;
        $has_node=false;
        while($bianli){
            $has_node=true;
            echo $bianli->data.'->';
            $bianli=$bianli->next;
        }
        if($has_node){
            echo '<br>';
        }
    }
}

echo '<br><br>队列的链表实现方式:<br>';
$queue2=new QueueList();
$queue2->print_queue();
$queue2->push(1);
$queue2->push(2);
$queue2->push(3);
$queue2->push(4);
$queue2->print_queue();
echo $queue2->shift().'<br>';
echo $queue2->shift().'<br>';
$queue2->print_queue();
?>

 

 

 
posted @ 2019-05-30 02:21  范仁义  阅读(317)  评论(0编辑  收藏  举报