zoukankan      html  css  js  c++  java
  • 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();
    ?>
     
  • 相关阅读:
    struts2后台返回json到jsp页面
    潜搜索——搜索界的趋势
    pat1022__字符串查找
    PAT1055___排序神题
    Codeforces Round #205 (Div. 2)C 选取数列可以选择的数使总数最大——dp
    Codeforces Round #204 (Div. 2) C. Jeff and Rounding——数学规律
    队列模拟题——pat1026. Table Tennis
    骰子点数概率__dp
    PAT1034. Head of a Gang ——离散化+并查集
    回文字符串的变形——poj1159
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/10947382.html
Copyright © 2011-2022 走看看