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();
?>
php数据结构课程---7、队列实战的更多相关文章
- php数据结构课程---3、队列(队列实现方法)
php数据结构课程---3.队列(队列实现方法) 一.总结 一句话总结: 1.数据实现:适用于功能不复杂的情况 2.链表实现:受限链表,只能队头队尾操作:适用于功能复杂情况 1.队列的数组实现注意点? ...
- C# RabbitMQ优先级队列实战项目演练
一.需求背景 当用户在商城上进行下单支付,针对客户等级的不同和订单金额的大小划分客户级别,需要优先处理给标识为大订单的客户发送一份订单邮件提醒.那么我们应用程序如何解决这样的需求场景呢?今天阿笨给大家 ...
- javascript数据结构与算法---队列
javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...
- C++数据结构之链式队列(Linked Queue)
C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...
- [数据结构]C语言队列的实现
我个人把链表.队列.栈分为一类,然后图.树分为一类.(串不考虑),分类的理由就是每一类有规律可循,即你能通过修改极少数的代码把链表变成队列.栈.(这里我们不考虑其他诸如设计模式等因素),因此本贴在讲完 ...
- JavaScript数据结构和算法----队列
前言 队列和栈很像,只是用了不同的原则.队列是遵循先进先出(FIFO)原则的一组有序的的项,队列在尾部添加新元素,从顶部移除元素.最新添加的元素必须必须排队在队列的,末尾.可以想象食堂排队买饭的样子. ...
- C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...
- JavaScript数据结构与算法-队列练习
队列的实现 // 队列类 function Deque () { this.dataStore = []; this.enqueueFront = enqueueFront; this.enqueue ...
- php数据结构课程---4、栈(是什么)
php数据结构课程---4.栈(是什么) 一.总结 一句话总结: 栈(stack),它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算. 1.栈的链表实现? 定义node,设置属性d ...
随机推荐
- JS window对象 History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能。语法: window.history.[属性|方法]
History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能. 注意:从窗口被打开的那一刻开始记录,每个浏览器窗口.每个标签页乃至每个框架,都 ...
- vue实现京东动态楼层效果
页面效果如下 <template> <div> <h1>首页</h1> <section class="floor-nav" ...
- 数组foreach
简单使用 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- 伪类元素before&after
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- thinkphp自动创建目录
自动创建目录 在第一次访问应用入口文件的时候,会显示如图所示的默认的欢迎页面,并自动生成了一个默认的应用模块Home. 接下来再看原来空的Application目录下面,已经自动生成了公共模块Comm ...
- storm集群的安装
storm图解 storm的基本概念 Topologies:拓扑,也俗称一个任务 Spoults:拓扑的消息源 Bolts:拓扑的处理逻辑单元 tuple:消息元组,在Spoults和Bolts传递数 ...
- 显示所有用户,mysql的基本操作
可以实现显示数据库中所有用户. select user from mysql.user; select user,host,password from mysql.user; 给表创建用户,授权: ...
- CPUID 指令的使用
使用 CPUID 指令可以从 processor 厂商里获得关于 processor 的详细信息,CPUID 指令是从 Intel 486 处理器以后开始加入支持. 1. 检测处理器是否支持 cpui ...
- Keystone controller.py & routers.py代码解析
目录 目录 Keystone WSGI 实现 controllerspy routerspy 参考文档 Keystone WSGI 实现 Keystone 项目把每个功能都分到单独的目录下,EXAMP ...
- BOM window对象方法
window对象方法 alert():弹出一个警告对话框. prompt():弹出一个输入对话框. confirm():弹出一个确认对话框.如果单击“确定按钮”返回true,如果单击“取消 ...