遍历

PHP数组总汇

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-03 07:09:58
  数组,顾名思义,本质上就是一系列数据的组合。在这个组合中,每个数据都是独立的,可以对每个单独的数据进行分配和读取。PHP对数据的操作能力非常强大,尤其是PHP为程序开发人员提供了大量方便、易懂的数组操作函数,本章重点PHP数组的创建和使用。 1.1创建数组和使用数组 在PHP中创建数组的方式主要有两种:一种是应用array()函数创建数组,另一种是直接通过为数组元素赋值的方式创建数组。 1.1.1使用array()函数创建数组 用array()语言结构来新建一个数组,该数组接受任意数量用逗号分隔的键(key)=>值(value)对;同时也可以在array中只给出数组元素值,而不必给出键,格式如下: //键值对 array(key=>value,...) //只有值 array(value1,value2,...) 在只有值而 没有 键的数组,在使用其中的数据时,可以直接利用他们在数组中的排列顺序取值: $array = [100,"name"=>'lhs']; echo $array[0];//100 echo $array[1];//报错 注:1、应用array()函数声明数组时, 数组下标既可以是数值索引也可以是关联索引。    2、自PHP5.4起可以使用短数组定义语法,用[ ]代替array(),如:$array=['asp','php']。   3、排列顺序取数组的值

go-map

我的梦境 提交于 2019-12-03 05:26:21
map 的基本介绍 map 是 key-value 数据结构,又称为字段或者关联数组。类似其它编程语言的集合, 在编程中是经常使用到 map 的声明 基本语法 var map 变量名 map[keytype]valuetype key 可以是什么类型 golang 中的 map,的 key 可以是很多种类型,比如 bool, 数字,string, 指针, channel , 还可以是只 包含前面几个类型的 接口, 结构体, 数组 通常 key 为 为 int 、string 注意: slice, map 还有 function 不可以,因为这几个没法用 == 来判断 valuetype 可以是什么类型 valuetype 的类型和 key 基本一样,这里我就不再赘述了 通常为: 数字(整数,浮点数),string,map,struct map 声明的举例 map 声明的举例: var a map[string]string var a map[string]int var a map[int]string var a map[string]map[string]string 注意:声明是不会分配内存的,初始化需要 make ,分配内存后才能赋值和使用。 案例演示: package main import ( "fmt" ) func main() { //map的声明和注意事项

【转载】MySQL count(*) count(1) count(column)区别

南笙酒味 提交于 2019-12-03 04:40:30
MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高 InnoDB 引擎执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数 count函数 count(主键 id) ,InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断是不可能为空的,就按行累加 count(1) ,InnoDB 引擎遍历整张表,但不取值。server 层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加。 count(字段) 1)如果这个“字段”是定义为 not null 的话,一行行地从记录里面读出这个字段,判断不能为 null,按行累加; 2)如果这个“字段”定义允许为 null,那么执行的时候,判断到有可能是 null,还要把值取出来再判断一下,不是 null 才累加。 count(*) 并不会把全部字段取出来,而是专门做了优化,不取值,按行累加。 注: count(※) 遍历哪个索引树得到的结果逻辑上都是一样的count(※) 这样的操作,遍历哪个索引树得到的结果逻辑上都是一样的MySQL 优化器会找到最小的那棵树来遍历。在保证逻辑正确的前提下,尽量减少扫描的数据量,是数据库系统设计的通用法则之一 按照效率排序的话,count

C++二叉树的遍历:深度优先(前序、中序、后序)和广度优先(层次)

末鹿安然 提交于 2019-12-03 04:31:05
准备 深度优先遍历:沿着每一个分支路径进行深入访问。前序、中序、后序都是深度优先遍历的特例。可以用递归实现,非递归一般借助栈容器。 广度优先遍历:又叫层次遍历,对每一层依次访问。可以借助队列容器来实现。 先定义和创建一颗二叉树 #include <iostream> #include <vector> #include <queue> #include <stack> //定义二叉树结点 template<typename T> struct Node { T value; Node<T> *left; Node<T> *right; Node(const T &val) :value(val), left(nullptr), right(nullptr) {} Node(const T &val, Node<T> *&lnode, Node<T> *&rnode) :value(val), left(lnode), right(rnode) {} }; //创建二叉树 template<typename T> Node<T>* createBinaryTree(const std::initializer_list<T> &list) { std::vector<Node<T>*> vec; for (auto &item : list) { Node<T> *newNode =

二叉树前序、中序、后续、广度优先遍历

江枫思渺然 提交于 2019-12-03 04:30:53
二叉树遍历: 有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁,而对于广度遍历来说,需要其他数据结构的支撑,比如堆了。所以,对于一段代码来说,可读性有时候要比代码本身的效率要重要的多。 四种遍历思想: 前序:根–>左子树–>右子树 中序:左子树–>根–>右子树 后序:左子树–>右子树–>根 层次遍历:按层一层层遍历 例如,求下面二叉树的各种遍历 代码实现 首先查看二叉树结构的定义: package com.syj.test.tree; import lombok.Data; /** * Created by syj on 2018/12/25. */ @Data public class BinaryTree { BinaryTree(String val) { this.val = val; } //当前节点值 private String val; //左子树 private BinaryTree left; //右子树 private BinaryTree right; } 各种遍历 前中后序遍历采用递归的方式,只是在输出的地方不同,其他地方一样,大家体会下为什么这样做。 广度优先,采用的是队列的方式,按层 先进先出。 package

【大话数据结构】二叉树的遍历(前序 中序 后续 层次 深度优先 广度优先 DFS BFS)

自古美人都是妖i 提交于 2019-12-03 04:30:39
书籍推荐 《大话数据结构》—— https://www.loneway.ren/book/detail/20006 二叉树的遍历 二叉树的遍历方式有两类:深度优先遍历和广度优先遍历。 深度优先遍历 深度优先遍历是指顺着某一条路径尽可能的向前探索,必要的时候(探索到叶子节点)回溯。 遍历顺序: 先根序遍历(DLR) 中根序遍历(LDR) 后根序遍历(LRD) 实现方法: 递归方法 给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def inorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ assert isinstance

二叉树遍历(前序、中序、后序、层次、深度优先)递归和非递归 java实现

五迷三道 提交于 2019-12-03 04:30:20
二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的。对于二叉树, 有深度遍历 和 广度遍历 ,深度遍历有 前序、中序以及后序 三种遍历方法,广度遍历即我们寻常所说的 层次遍历 。由于树的定义本身就是递归定义,因此採用递归的方法去实现树的三种遍历不仅easy理解并且代码非常简洁,而对于广度遍历来说,须要其他数据结构的支撑。比方堆了。 四种基本的遍历思想为: 前序遍历:根结点 —> 左子树 —> 右子树 中序遍历:左子树—> 根结点 —> 右子树 后序遍历:左子树 —> 右子树 —> 根结点 层次遍历:仅仅需按层次遍历就可以 比如。求以下二叉树的各种遍历 1 / \ 2 3 / \ / 4 5 6 / \ 7 8 前序遍历:1 2 4 5 7 8 3 6 中序遍历:4 2 7 5 8 1 6 3 后序遍历:4 7 8 5 2 6 3 1 层次遍历:1 2 3 4 5 6 7 8 二叉树的代码 public class TreeNode { public int val ; public TreeNode left , right ; public TreeNode ( int val ) { this . val = val ; this . left = this . right = null ; } } 一、前序遍历 1)依据上文提到的遍历思路:根结点

二叉树的深度优先遍历和广度优先遍历

你离开我真会死。 提交于 2019-12-03 04:30:07
1. 分析 二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为先序遍历、中序遍历、后序遍历。具体说明如下: 先序遍历:对任一子树,先访问根,然后遍历其左子树,最后遍历其右子树。 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树。 后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。 广度优先遍历:又叫层次遍历,从上往下对每一层依次访问,在每一层中,从左往右(也可以从右往左)访问结点,访问完一层就进入下一层,直到没有结点可以访问为止。 2. 举例说明 对下图所示的二叉排序树进行遍历,要求使用先序遍历(递归、非递归)、中序遍历(递归、非递归)、后序遍历(递归、非递归)和广度优先遍历。 2.1 参考代码 package BinaryTreeTraverseTest; import java.util.LinkedList; import java.util.Queue; /** * 二叉树的深度优先遍历和广度优先遍历 * @author Fantasy * @version 1.0 2016/10/05 - 2016/10/07 */ public class

【树】二叉树遍历算法(深度优先、广度优先遍历,前序、中序、后序、层次)及Java实现...

心已入冬 提交于 2019-12-03 04:29:40
【树】二叉树遍历算法(深度优先、广度优先遍历,前序、中序、后序、层次)及Java实现 目录 一、前序遍历 二、中序遍历 三、后序遍历 四、层次遍历 遍历的作用 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁,而对于广度遍历来说,需要其他数据结构的支撑,比如堆了。所以,对于一段代码来说,可读性有时候要比代码本身的效率要重要的多。 四种主要的遍历思想为: 前序遍历:根结点 ---> 左子树 ---> 右子树 中序遍历:左子树---> 根结点 ---> 右子树 后序遍历:左子树 ---> 右子树 ---> 根结点 层次遍历:只需按层次遍历即可 例如,求下面二叉树的各种遍历 前序遍历:1 2 4 5 7 8 3 6 中序遍历:4 2 7 5 8 1 3 6 后序遍历:4 7 8 5 2 6 3 1 层次遍历:1 2 3 4 5 6 7 8 一、前序遍历 1)根据上文提到的遍历思路:根结点 ---> 左子树 ---> 右子树,很容易写出递归版本: public void preOrderTraverse1(TreeNode root) { if (root !

二叉树遍历,深度优先遍历,广度优先遍历,前序中序后续优先遍历,层次遍历

与世无争的帅哥 提交于 2019-12-03 04:29:27
首先明白两个概念: 1. 深度遍历包括前中后序遍历三种; 2. 广度优先遍历就是层次遍历。 PS: 前中后序遍历,如果使用递归遍历,都很简单易理解; 如果使用非递归方式,首先想到的就应该是使用栈结构来控制整个过程,因为递归也是利用栈来实现的; 前中后序遍历的非递归方式中,后序遍历的非递归方式相比较而言,略复杂。 直接上代码: #include "stdlib.h" #include <iostream> #include <stack> #include <queue> using namespace std; struct BinaryTreeNode { int value; BinaryTreeNode* leftChild; BinaryTreeNode* rightChild; }; /* 前序遍历递归方式 步骤: 1.先处理当前节点 2.递归处理完左支 3.递归处理右支 */ void PreOrderRecursive(BinaryTreeNode* parent) { if(NULL == parent) return; cout<<parent->value<<" "; PreOrderRecursive(parent->leftChild); PreOrderRecursive(parent->rightChild); } /* 前序遍历非递归方式 说明: