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 ...
随机推荐
- Linux 进程间通信 共享内存
1.特点: 1)共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝.如管道当在内核空间创建以后,用户空间需要内存 拷贝,需要拷贝数据,所以效率低. 2)为了在多个进 ...
- pip3 常用操作
清华大学pip镜像 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ # 设置为默认 pip install pip -U pip config set ...
- 随笔记录 yum -y clean all出错解决方案
出现以下问题的解决方案: 使用解决方案之前,要先确定一下几种情况: 1.检查光盘是否挂载 2.ISO映像文件是否使用正确 解决方案1: rm -rf /var/cache/yum/* yum repo ...
- lambda和DynamoDB连接
在DynamoDB当作创建一个新表,然后在项目当中创建,把string value的值填写一下. 在IAM创建角色附加 AWSLambdaDynamoDBExecutionRole权限 在lambda ...
- vue实现京东动态楼层效果
页面效果如下 <template> <div> <h1>首页</h1> <section class="floor-nav" ...
- vue computed和methods 计算属性和侦听器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- FFT最新卡常研究
指针优化并没有什么卵用,反而增大了代码的不可读性. 除了本来的循环顺序优化寻址,在预处理单位复数根时,可以连续存储,以增快寻址速度,细节见代码. 代码给出的是FFT,NTT是一样的. #include ...
- LeetCode 1037. Valid Boomerang (有效的回旋镖)
题目标签:Math 题目给了我们三个点,让我们判断这三个点是否在一条直线上. 利用斜率 k = (y1 - y0) / (x1 - x0) 来判断,如果 三个点 abc, ab 的斜率 = bc 的斜 ...
- TensorFlow 与cudnn版本不匹配问题
log:Loaded runtime CuDNN library: 7.1.4 but source was compiled with: 7.2.1. 我安装的事cuda 9.0 cudnn 7. ...
- man命令的使用方法
转载自:http://www.cnblogs.com/hnrainll/archive/2011/09/06/2168604.html Linux man命令的使用方法 Linux提供了丰富的帮助手册 ...