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、队列实战的更多相关文章

  1. php数据结构课程---3、队列(队列实现方法)

    php数据结构课程---3.队列(队列实现方法) 一.总结 一句话总结: 1.数据实现:适用于功能不复杂的情况 2.链表实现:受限链表,只能队头队尾操作:适用于功能复杂情况 1.队列的数组实现注意点? ...

  2. C# RabbitMQ优先级队列实战项目演练

    一.需求背景 当用户在商城上进行下单支付,针对客户等级的不同和订单金额的大小划分客户级别,需要优先处理给标识为大订单的客户发送一份订单邮件提醒.那么我们应用程序如何解决这样的需求场景呢?今天阿笨给大家 ...

  3. javascript数据结构与算法---队列

    javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...

  4. C++数据结构之链式队列(Linked Queue)

    C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...

  5. [数据结构]C语言队列的实现

    我个人把链表.队列.栈分为一类,然后图.树分为一类.(串不考虑),分类的理由就是每一类有规律可循,即你能通过修改极少数的代码把链表变成队列.栈.(这里我们不考虑其他诸如设计模式等因素),因此本贴在讲完 ...

  6. JavaScript数据结构和算法----队列

    前言 队列和栈很像,只是用了不同的原则.队列是遵循先进先出(FIFO)原则的一组有序的的项,队列在尾部添加新元素,从顶部移除元素.最新添加的元素必须必须排队在队列的,末尾.可以想象食堂排队买饭的样子. ...

  7. C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...

  8. JavaScript数据结构与算法-队列练习

    队列的实现 // 队列类 function Deque () { this.dataStore = []; this.enqueueFront = enqueueFront; this.enqueue ...

  9. php数据结构课程---4、栈(是什么)

    php数据结构课程---4.栈(是什么) 一.总结 一句话总结: 栈(stack),它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算. 1.栈的链表实现? 定义node,设置属性d ...

随机推荐

  1. Unicode - 16 位统一超级字符集

    描述 (DESCRIPTION) 国际标准 ISO 10646 定义了 通用字符集 (Universal Character Set, UCS). UCS 包含所有别的字符集标准里的字符,并且保证了 ...

  2. 获取文件或目录的属性 stat 函数

    头文件:  <sys/types.h>   <sys/stat.h>   <unistd.h> int stat(const char *path, struct ...

  3. LNMP部署

    部署企业LNMP架构 源码包:nginx-* ; mysql-* ; php-* ; boost-* ; zend-loader-php5.6-linux-* ;yum软件: pcre-devel z ...

  4. Mybatis中$和#取数据的区别

    Mybatis配置中,取出map入参的数据一般有两种方式#{key}和${key},下面是这两种取值的区别: 以同样的语句做对比: <select id="geUserByParam1 ...

  5. Dart编程数据类型

    编程语言最基本的特征之一是它支持的数据类型集.这些是可以用编程语言表示和操作的值的类型. Dart语言支持以下类型 数字 字符串 布尔 列表list map 数字 Dart中的数字用于表示数字文字.D ...

  6. 【NOI2019模拟2019.7.1】为了部落 (生成森林计数,动态规划)

    Description: \(1<=n<=1e9,1<=m,k<=100\) 模数不是质数. 题解: 先选m个点,最后答案乘上\(C_{n}^m\). 不妨枚举m个点的度数和D ...

  7. 暑期集训日志(Day6~Day17)

    章·十七:2019-07-28:为谁辛苦为谁甜 ·昨日小结 颓爆了QAQ,昨天又垫底了. 最简单一道题弃疗的我直接被甩倒了总榜垫底…… 我……不想说啥…… 我是渣比. 我不能颓废了. 醒来啊麦克白! ...

  8. poj1637Sightseeing tour

    传送门 网络流解混合图欧拉回路,以前xy讲过,但是我一直没写. 把无向边随意定向,每个点权值为出度减入度,权值为奇数无解,权值大于0的从s向其连权值/2的边,小于0的向t连-权值/2的边,原图中无向图 ...

  9. NX二次开发-UFUN工程图表格注释section转tag函数UF_TABNOT_ask_tabular_note_of_section

    NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...

  10. flutter 死亡红屏 隐藏

    当组件报错的时候会出现红屏现象,解决办法是覆盖原有的ErrorWidget 用一个空白的组件去替换它 1.main.dart中进行修改 新增覆盖代码: void setCustomErrorPage( ...