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(); ?>
我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站:
【读书编程笔记】fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
AI交流资料群:753014672