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 ...
随机推荐
- Tomcat爆破
把输入的账户和密码包起来 选择第三个模式 第一个添加用户名 第二个添加: 第三个添加密码 选择编码格式 取消打钩
- 发现一个新的远程软件 gotohttp
之前直到远程桌面连接是TeamViewer 替换的原因是: 被控制端版本 11.0.x (很久以前安装的),而我本地的Teamviewer是 14.x, 去连接,好像提示被控制端的版本太低:本地使用 ...
- vue导出table内容至excel——转
一:在项目中需要安装2个依赖项,如下命令: npm install --save file-saver xlsx 二:在vue文件中如下使用即可: <template> <div c ...
- Batch - %~dp0 modifiers
%~dp0 简易解释 The variable %0 in a batch script is set to the name of the executing batch file. The ~dp ...
- JavaScript闭包和回调详解
一.闭包 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包有三个特性: 1.函数嵌套函数; 2.函数内部可以引用外部的参数和变量; 3.参 ...
- (转)简述负载均衡&CDN技术
转:http://www.cnblogs.com/mokafamily/p/4402366.html#commentform 曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维 ...
- JS中 reduce() 的用法
过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它.事实上,如果你能真正了解它的话,其实在很多地方我们都可以用得上,那么今天我们就来简单聊聊JS中 reduce ...
- 事件绑定addEventListener
通过addEventListener监听函数实现的dom事件绑定 addEventListener可以为当前dom添加一个事件(这个事件可以是个已有的事件),这就无法避免我们在写代码的时候重复去绑定同 ...
- STM32F103
memory map • Four masters: – Cortex® -M3 core DCode bus (D-bus) and System bus (S-bus)– GP-DMA1 & ...
- PAT_A1053#Path of Equal Weight
Source: PAT A1053 Path of Equal Weight (30 分) Description: Given a non-empty tree with root R, and w ...