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();
?>
 

最新文章

  1. 第10章 Shell编程(3)_字符处理命令和条件判断
  2. BZOJ 1176: [Balkan2007]Mokia
  3. PhpStorm创建Drupal模块项目开发教程(2)
  4. ASP.NET 系列:单元测试之Log4Net
  5. Hadoop.2.x_集群初建
  6. shell zsh
  7. netty-socketio
  8. Unable to locate package update
  9. c++迭代器(iterator)详解
  10. scss实现不同方向的三角
  11. IdentityServer(15)- 第三方快速入门和示例
  12. 【算法】Attention is all you need
  13. 七牛云图片的存储与处理--基于node
  14. can物理信号-----------显性和隐性
  15. typeof() 和 GetType()区是什么
  16. python学习笔记九——序列
  17. 洛谷P1970 花匠
  18. BFS广度优先搜索 poj1915
  19. Spring学习之路-注解
  20. TypeError: HashUpdate fail

热门文章

  1. python 基本输入输出
  2. wall -- 向所有人的终端发送消息
  3. redis设置自动启动
  4. Mysql流程解析
  5. GC线程是否为守护线程?
  6. Python 分布式锁
  7. BlockingQueu 阻塞队列
  8. 暑假集训test-8-29
  9. macOS cataline 10.15 升级后问题一览
  10. 牛客多校第九场 E All men are brothers 并查集/组合论