大数据处理学习笔记1.5 掌握Scala内建控制结构

news2024/12/27 12:30:51

文章目录

  • 零、本讲学习目标
  • 一、条件表达式
    • (一)语法格式
    • (二)执行情况
    • (三)案例演示
      • 任务1、根据输入值的不同进行判断
      • 任务2、编写Scala程序,判断奇偶性
  • 二、块表达式
    • (一)语法格式
    • (二)执行情况
    • (三)案例演示
  • 三、for循环
    • (一)单重for循环
      • 1、语法格式
      • 2、执行情况
      • 3、案例演示
        • 任务1:输出1到10
        • 任务2、遍历字符串,输出每个字符
        • 任务3、计算 1 + 2 + 3 + ... + 100
        • 任务4、输出列表内的偶数
        • 任务5、输出全部两位素数
    • (二)嵌套for循环
      • 1、语法格式
      • 2、案例演示
        • 任务1、打印九九表
          • 方法一、采用双重循环来实现
          • 方法二、采用单重循环来实现
          • 方法三、采用单重循环与流间变量绑定来实现
          • 方法四、采用单重循环、流间变量与yield来实现
        • 任务2、去掉对角线
        • 课堂练习:编程求解百钱买百鸡问题
  • 四、条件循环
    • (一)while循环
      • 1、语法格式
      • 2、案例演示
        • 任务1、计算1+ 2 + 3 + ... + 100
        • 任务2、打印全部水仙花数
    • (二)do while循环
      • 1、语法格式
      • 2、案例演示
        • 任务:计算1+ 2 + 3 + ... + 100
  • 五、异常处理
    • (一)异常处理概述
    • (二)案例演示
      • 任务:演示try-catch-finally
  • 六、match结构
    • (一)语法格式
    • (二)案例演示
      • 任务:给城市下评语
  • 七、变量作用域
    • (一)Java变量作用域
      • 1、内部能访问外部
      • 2、外部不能看内部
    • (二)Scala变量作用域
      • 1、内部不能访问外部
      • 2、外部不能访问内部
  • 八、补充案例
    • 任务:评定成绩等级
      • 1、编写符合函数式编程风格的Sala程序
      • 2、函数式风格的程序有几个特点
      • 3、非函数式风格的程序

零、本讲学习目标

  1. 掌握条件表达式
  2. 掌握各种循环
  3. 理解流间变量绑定
  4. 掌握yield语句的使用
  5. 掌握异常处理语句
  6. 了解match语句的使用
  7. 理解变量作用域

Scala提供的控制结构并不算多,因为在函数式编程中,可以自己开发出各种功能的控制结构,所以Scala提供的原生控制结构仅仅够用为止。

一、条件表达式

(一)语法格式

if (条件)1 else2

(二)执行情况

  • 条件为真,结果是值1;条件为假,结果是值2。如果if和else的返回结果同为某种类型,那么条件表达式结果也是那种类型,否则就是Any类型

(三)案例演示

任务1、根据输入值的不同进行判断

在这里插入图片描述

  • 当然也可以在一个表达式中进行多次判断
    在这里插入图片描述
  • 可以将上述条件表达式改造成嵌套的选择结构,可读性倒是提高了,但是简洁性降低了
    在这里插入图片描述

任务2、编写Scala程序,判断奇偶性

  • 打开Scala项目ScalaDemo2022,创建net.hw.structure包,在包里创建Example01对象
    在这里插入图片描述
package net.hw.structure

import scala.io.StdIn

object Example01 {
  def main(args: Array[String]): Unit = {
    print("n = ")
    val n = StdIn.readLine().toInt
    if (n % 2 == 0) {
      println(n.toString + "是偶数")
    } else {
      println(n.toString + "是奇数")
    }
  }
}
  • 运行程序,查看结果
    在这里插入图片描述
    在这里插入图片描述

  • 利用if结构具有返回值的特性,改写程序
    在这里插入图片描述

  • 运行程序,查看结果
    在这里插入图片描述

二、块表达式

(一)语法格式

{语句组}
  • 块表达式为包含在符号“{}”中的语句块

(二)执行情况

  • 需要注意的是,Scala中的返回值是最后一条语句的执行结果,而不需要像Java一样单独写return关键字。如果表达式中没有执行结果,就返回一个Unit对象,类似Java中的void。

(三)案例演示

  • 语句块最后一句的值就是整个块表达式的结果
    在这里插入图片描述
  • 语句块最后一句没有执行结果,那么块表达式结果就是Unit
    在这里插入图片描述

三、for循环

(一)单重for循环

1、语法格式

for (变量 <- 集合或数组 (条件)) {
     语句组
}

2、执行情况

  • 表示将集合或数组中的每一个值循环赋给一个变量

3、案例演示

任务1:输出1到10

  • 两种方式实现
    在这里插入图片描述
  • Range(a, b): 从a到b,不包含b,跟Python里的range函数一样,含头不含尾
  • 1 to 10表示将1到10的所有值组成一个集合,且包括10。若不想包括10,则可使用关键字until
    在这里插入图片描述
  • 用Java语言完成任务
    在这里插入图片描述
  • 用Python语言完成任务
    在这里插入图片描述
  • 打印字符直角三角形
    在这里插入图片描述
  • 利用map函数产生每行星号构成的向量,然后利用foreach函数循环输出
    在这里插入图片描述
  • 利用双重循环与流间变量
    在这里插入图片描述

任务2、遍历字符串,输出每个字符

  • 方法一、按索引取字符串的每个字符
    在这里插入图片描述
  • 方法二:将字符串看作一个由多个字符组成的集合
    在这里插入图片描述
  • 从Scala2.13.0开始,其它类型数据与字符进行+运算,会抛出警告信息
    在这里插入图片描述
  • cChar类型,因此需要调用toString方法,将其转换成字符串,才能与其它字符串连接

任务3、计算 1 + 2 + 3 + … + 100

  • 注意sum必须定义为var型变量
    在这里插入图片描述

任务4、输出列表内的偶数

  • 采用两种方式来实现
    在这里插入图片描述
  • 采用Java语言实现
    在这里插入图片描述
  • 采用Python语言实现
    在这里插入图片描述

任务5、输出全部两位素数

for (n <- 10 to 100; if !(n % 2 == 0 || n % 3 == 0 || n % 5 == 0 || n % 7 == 0))
    print(n.toString + " ")

在这里插入图片描述

(二)嵌套for循环

1、语法格式

  • 传统格式
for (变量1 <- 集合或数组(条件)for (变量2 <- 集合或数组(条件)) {
       语句组
    }
}
  • 特有格式
for (变量1 <- 集合或数组; 变量2 <- 集合或数组 (条件)) {
   语句组
}

2、案例演示

任务1、打印九九表

方法一、采用双重循环来实现
  • 在项目ScalaDemo2022里创建Example02对象
    在这里插入图片描述
package net.hw.structure

/**
  * 功能:双重循环打印九九表
  * 作者:华卫
  * 日期:2022年3月6日
  */
object Example02 {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 9) {
      for (j <- 1 to i)
        print(i.toString + "×" + j + "=" + (i * j) + "\t")
      println()
    }
  }
}
  • 运行程序,查看结果
    在这里插入图片描述
方法二、采用单重循环来实现
  • 在项目ScalaDemo2022里创建Example03对象
    在这里插入图片描述
package net.hw.structure

/**
  * 功能:单重循环打印九九表
  * 作者:华卫
  * 日期:2022年3月6日
  */
object Example03 {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 9; j <- 1 to i) {
      print(i.toString + "×" + j + "=" + (i * j) + "\t")
      if (i == j) println()
    }
  }
}
  • 运行程序,查看结果
    在这里插入图片描述
方法三、采用单重循环与流间变量绑定来实现
  • 在项目ScalaDemo2022里创建Example04对象
  • 在for循环头里sep = if (i == j) "\r\n" else "\t"就是流间变量绑定
    在这里插入图片描述
package net.hw.structure

/**
  * 功能:单重循环与流间变量绑定打印九九表
  * 作者:华卫
  * 日期:2022年03月06日
  */
object Example04 {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 9; j <- 1 to i; sep = if (i == j) "\r\n" else "\t")
      print(i.toString + "×" + j + "=" + (i * j) + sep)
  }
}
  • 运行程序,查看结果
    在这里插入图片描述
方法四、采用单重循环、流间变量与yield来实现
  • for循环语句本身的返回值是Unit类型,无论在循环体中返回什么都是无效的,最终得到的都是Unit的值,但是可以在循环中的循环条件和循环体之间加上yield关键字,那么就可以将循环体产生的返回值组成数组进行返回。
  • 在项目ScalaDemo2022里创建Example05对象
    在这里插入图片描述
package net.hw.structure

/**
  * 功能:采用单重循环、流间变量与yield打印九九表
  * 作者:华卫
  * 日期:2022年03月06日
  */
object Example05 {
  def main(args: Array[String]): Unit = {
    val list = for (i <- 1 to 9; j <- 1 to i; sep = if (i == j) "\r\n" else "\t")
      yield i.toString + "×" + j + "=" + (i * j) + sep
    for (x <- list) print(x)
  }
}

  • 运行程序,查看结果
    在这里插入图片描述

任务2、去掉对角线

  • 一个三阶方阵,单元格的值是行号与列号的乘积,去掉对角线,输出剩余元素
    在这里插入图片描述
  • 方法一、传统双重循环
    在这里插入图片描述
  • 方法二、特有双重循环
    在这里插入图片描述

课堂练习:编程求解百钱买百鸡问题

  • 我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
  • 翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?
    { c o c k + h e n + c h i c k = 100 ( 1 ) c o c k × 5 + h e n × 3 + c h i c k 3 = 100 ( 2 ) \begin{cases} cock + hen + chick = 100 &(1) \\ cock \times 5 + hen \times 3 + \displaystyle \frac{chick}{3}= 100 & (2)\\ \end{cases} cock+hen+chick=100cock×5+hen×3+3chick=100(1)(2)

四、条件循环

(一)while循环

1、语法格式

  • Scala的while循环与Java类似
while(条件) {   
   循环体
}

2、案例演示

任务1、计算1+ 2 + 3 + … + 100

  • 注意:sum必须是变量
    在这里插入图片描述
  • 采用函数式风格来写代码,递归函数来实现求和,注意:此处sum是常量
    在这里插入图片描述

任务2、打印全部水仙花数

  • 所谓水仙花数,是指等于其各位数字立方和的三位数。

\qquad 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33
\qquad 370 = 3 3 + 7 3 + 0 3 370=3^3+7^3+0^3 370=33+73+03
\qquad 371 = 3 3 + 7 3 + 1 3 371=3^3+7^3+1^3 371=33+73+13
\qquad 407 = 4 3 + 0 3 + 7 3 407=4^3+0^3+7^3 407=43+03+73

  • 对于[100, 999]范围的每个数n,我们要去判断它是否等于其各位数字的立方和,这里的难点或关键在于如何分解一个三位数,得到它的每位数字。

  • 假设我们已经把三位数n分解成百位数p3,十位数p2,个位数p1,
    这样我们的筛选条件就可以写出来:n == p3 * p3 * p3 + p2 * p2 * p2 + p1 * p1 * p1。

  • 如何拆分一个三位数n呢?

  • 首先求n的个位数:n % 10
    然后要将三位数变成两位数:n = n / 10;
    对于新的两位数n,又求它的个位数:n % 10
    然后要将两位数变成一位数:n = n / 10;

  • 也就是说我们可以交替使用求余和整除运算将一个三位数拆分,得到它的个位数、十位数和百位数。当然这个分解方法可以推广到任何多位数的拆分。

  • net.hw.structure包里创建Example06对象
    在这里插入图片描述

package net.hw.structure

/**
  * 功能:打印水仙花数
  * 作者:华卫
  * 日期:2022年03月06日
  */
object Example06 {
  def main(args: Array[String]): Unit = {
    for (n <- 100 to 999) {
      val p1 = n % 10     // 个位数
      val p2 = n / 10 % 10 // 十位数
      val p3 = n / 100     // 百位数
      if (n == p1 * p1 * p1 + p2 * p2 * p2 + p3 * p3 * p3)
        println(n.toString + " = " + p3 + "^3 + " + p2 + "^3 + " + p1 + "^3")
    }
  }
}
  • 运行程序,查看结果
    在这里插入图片描述

(二)do while循环

  • 与Java语言一样,do while循环与while循环类似,但是do while循环会确保至少执行一次循环。

1、语法格式

do {
   循环体
} while(条件)

2、案例演示

任务:计算1+ 2 + 3 + … + 100

在这里插入图片描述

五、异常处理

(一)异常处理概述

  • Scala中继承了Java的异常机制,提供了程序中产生意外情况时处理的机制,抛出异常的过程和Java中基本一致,通过throw关键字进行:throw XxxException(),一旦抛出可以当场捕获处理或接着向上抛,捕获异常是通过 try-catch-finally来实现的。

(二)案例演示

任务:演示try-catch-finally

  • try-catch是有返回值的:如果没有异常就是try语句的返回值,如果有异常就是catch语句的返回值。注意不会是finally的返回值,finally即使有返回值,也会被抛弃,这点和Java是不同的。
  • net.hw.structure包里创建Example07对象
    在这里插入图片描述
package net.hw.structure

import java.io.IOException

/**
  * 功能:演示异常处理
  * 作者:华卫
  * 日期:2022年03月06日
  */
object Example07 {
  def main(args: Array[String]): Unit = {
    var message = ""
    val result = try {
      mx()
      "恭喜,程序执行正常!"
    } catch {
      case e: NullPointerException => "空指针异常"
      case e: IOException => "呵呵,I/O异常~"
      case e: Exception => "管它呢,反正是异常~"
    } finally {
      message = "程序到此为止!"
      "无论是否有异常,都会执行finally里的语句~"
    }
    println(result)
    println(message)
  }

  def mx(): Unit = {
    throw new RuntimeException("随便抛出一个异常~")
  }
}
  • 执行程序,查看结果(此时有异常,result取的是catch里的返回值 - 管它呢,反正是异常~,finally语句块执行了的,因此message可以打印出来 - 程序到此为止!
    在这里插入图片描述

  • 注释掉mx()方法里的语句
    在这里插入图片描述

  • 执行程序,查看结果(此时有异常,result取的是try里的返回值 - 恭喜,程序执行正常!
    在这里插入图片描述

  • 在Scala里,finally的返回值不会覆盖try和catch的返回值,这一点跟Java不同。
    在这里插入图片描述

  • 运行程序,查看结果(此时运行test()方法,调用mx()方法抛出异常,执行catch语句块,返回异常~,但是要被finally语句块的返回值停止!覆盖,因此最终输出的就是停止!
    在这里插入图片描述

  • 我们把mx()方法里的抛出异常的语句注释掉,此时程序正常运行,但是test()方法的返回值不会是正常~,还是会被finally语句块的返回值覆盖,成为停止!
    在这里插入图片描述

六、match结构

(一)语法格式

变量 match {
      case1 => 表达式1或语句1
      case2 => 表达式2或语句2
      case3 => 表达式3或语句3
      ……
      case _ => 表达式n或语句n
    }
  • Scala中的match类似于其他语言的switch。与Java不同的是,match语句可以应用在任何类型量或表达式上,另外需要调用break语句,match默认执行完一个case后直接跳出match结构。注意,match是具有返回值的,就是被选到的case的值。

(二)案例演示

任务:给城市下评语

  • net.hw.structure包里创建Example08对象
    在这里插入图片描述
package net.hw.structure

import scala.io.StdIn

/**
  * 功能:演示match语句
  * 作者:华卫
  * 日期:2022年03月06日
  */
object Example08 {
  def main(args: Array[String]): Unit = {
    print("输入城市:")
    val city = StdIn.readLine();
    val comment = city match {
      case "北京" => "伟大的首都"
      case "上海" => "神奇的魔都"
      case "泸州" => "醉人的酒城"
      case _ => "一般的城市"
    }
    print(city + ": " + comment)
  }
}
  • 运行程序,查看结果
    在这里插入图片描述
    在这里插入图片描述

七、变量作用域

(一)Java变量作用域

  • Java中根据不同大括号区分变量作用范围,不允许有叠加,外部看不到内部,内部能看到外部。

1、内部能访问外部

在这里插入图片描述

2、外部不能看内部

在这里插入图片描述

(二)Scala变量作用域

  • Scala中根据不同大括号区分变量作用范围,不允许有叠加,外部看不到内部,内部看不到外部。

1、内部不能访问外部

  • net.hw.structure包创建Example09对象
    在这里插入图片描述

2、外部不能访问内部

  • net.hw.structure包创建Example10对象
    在这里插入图片描述

八、补充案例

任务:评定成绩等级

1、编写符合函数式编程风格的Sala程序

  • net.hw.structure包里创建Example11对象
    在这里插入图片描述
package net.hw.structure

import scala.io.StdIn

/**
  * 功能:判定成绩等级(函数式风格)
  * 作者:华卫
  * 日期:2022年03月06日
  */
object Example11 {
  def main(args: Array[String]): Unit = {
    print("score = ")
    val score = StdIn.readLine().toInt

    val comment = if (score > 100) {
      "超出范围"
    } else if (score >= 90) {
      "优秀"
    } else if (score >= 80) {
      "良好"
    } else if (score >= 70) {
      "中等"
    } else if (score >= 60) {
      "及格"
    } else if (score >= 0) {
      "不及格"
    } else {
      "超出范围"
    }

    println("评语:" + comment)
  }
}
  • 运行程序,查看结果
    在这里插入图片描述

2、函数式风格的程序有几个特点

  • if结构像函数一样有返回值
  • if结构里除了传入参数score之外,没有别的变量。
    -if结构里没有与外界交流,比如输入或输出或网络连接或读取文件之类。
  • 函数式编程是为了处理计算,不考虑系统的读写(I/O)。
  • 函数式编程强调没有副作用(指的是函数内部与外部互动,产生运算以外的其它结果)。函数要求独立,只返回一个值,没有其它行为,尤其不能修改外部变量的值。

3、非函数式风格的程序

  • 看看下面这个程序 - Example12
    在这里插入图片描述

  • 虽然处理结果跟上面那个程序一样,但是并不符合函数式编程风格。因为if结构有副作用,修改了if结构之外的变量comment的值。

  • 再看看下面这个程序 - Example13
    在这里插入图片描述

  • 不符合函数式编程风格。因为if结构有副作用,有写操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/358060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科学推理~

科学推理 【物理】 1、力学 重力 重力并不是指向地心的&#xff0c;只有赤道可以 弹力 【重点】判断弹力方向 相互作用力 摩擦力 静摩擦力 滑动摩擦力 注意&#xff1a;最大静摩擦力默认等于滑动摩擦力 压强 固体压强 液体压强 连通器 气体压强 气体对外做功&#xff0c;T 下…

1 月份 NFT 行业报告

Jan.2023&#xff0c; DanielData Source: NFT Monthly Report1 月是近一年来代币价格最好的一个月&#xff0c;ETH、BTC 和 altcoins 的涨幅是 7 月以来最猛的。自然&#xff0c;这导致了 NFT 行业的交易量和市值增加。一些指标是可以预测的&#xff0c;比如已完成的投资轮数继…

BI知识全解,值得收藏

2021年度&#xff0c;中国商业软件市场的增长趋势是快速增长的&#xff0c;达到7.8亿美元&#xff0c;同比增长34.9%。商业智能BI在企业应用中具有巨大的价值&#xff0c;并逐渐成为现代企业信息化和数字化转型的基础。所以&#xff0c;全面了解BI&#xff0c;对于企业管理是非…

100天精通Python(数据分析篇)——第76天:Pandas数据类型转换函数pd.to_numeric(参数说明+实战案例)

文章目录专栏导读一、to_numeric参数说明0. 介绍1. arg1&#xff09;接收列表2&#xff09;接收一维数组3&#xff09;接收Series对象2. errors1&#xff09;errorscoerce2&#xff09;errors ignore3. downcast1&#xff09;downcastinteger2&#xff09;downcastsigned3&…

Spring中bean的生命周期(通俗易懂)

具体流程 bean的生命周期分4个阶段&#xff1a;   1.实例化   2.属性赋值   3.初始化   4.销毁 实例化就是在内存中new()出一个对象&#xff0c;属性赋值就是给那些被Autowired修饰的属性注入对象&#xff0c;销毁是在Spring容器关闭时触发&#xff0c;初始化的步骤比较…

隐私计算头条周刊(2.13-2.19)

开放隐私计算收录于合集#企业动态44个#周刊合辑44个#政策聚焦37个#隐私计算91个#行业研究36个开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播…

【JavaEE】Servlet学后大汇总

JavaEE之Servlet一、WEB容器二、Servlet常用API和简单说明三、Servlet生命周期Servlet对象是什么时候被创建的&#xff1f;Servlet被称为假单例一个请求对应一个request和一个response四、Servlet属性设置——三个范围&#xff08;请求、会话、应用&#xff09;五、会话、过滤器…

每日学术速递2.20

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Boundary Guided Mixing Trajectory for Semantic Control with Diffusion Models 标题&#xff1a;用于扩散模型语义控制的边界引导混合轨迹 作者&#xff1a;Ye Zhu, Yu Wu, Zhi…

Android 开发布局笔记01 控件

Relative Layout 前端界面代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools&qu…

数据结构与算法(Java版) | 线性结构和非线性结构

之前&#xff0c;我们说过&#xff0c;数据结构是算法的基础&#xff0c;因此接下来在这一讲我就要来给大家重点介绍一下数据结构了。 首先&#xff0c;大家需要知道的是&#xff0c;数据结构包括两部分&#xff0c;即线性结构和非线性结构。知道这点之后&#xff0c;接下来我…

flex一把梭

flex 使用display:flex&#xff0c;可以让一个元素变成弹性容器&#xff08;flex容器&#xff09;&#xff0c;该元素中的直接子元素成为弹性项&#xff08;flex项&#xff09; flex-direction 使用flex-direction可以控制flex容器的主轴的方向&#xff1a;垂直&#xff08;…

躬身入局,干货分享,2023年春招后端技术岗(Python)面试实战教程,Offer今始为君发

早春二月&#xff0c;研发倍忙&#xff0c;杂花生树&#xff0c;群鸥竟飞。为什么&#xff1f;因为春季招聘&#xff0c;无论是应届生&#xff0c;还是职场老鸟&#xff0c;都在摩拳擦掌&#xff0c;秣马厉兵&#xff0c;准备在面试场上一较身手&#xff0c;既分高下&#xff0…

Allegro如何让测量时显示双单位操作指导

Allegro如何让测量时显示双单位操作指导 在用Allegro做PCB设计的时候,时常会需要使用到测量命令,通常显示的一个单位,比如mil,如下图 当希望除了看到mil单位的值,又同时能够看到mm单位的值,省去换算的时间 具体设置如下 点击Setup点击User Preference

Linux服务:Nginx服务部署及基础配置

目录 一、Nginx介绍 1、Nginx简介 2、I/O模型相关概念 3、Nginx事件驱动模型 二、部署Nginx 1、yum部署Nginx 2、编译安装Nginx 三、Nginx使用 1、基础使用 2、nginx信号 四、web服务选择及优化 1、Nginx与Apache对比 2、Nginx服务调优 一、Nginx介绍 1、Nginx简…

SAP ABAP

方法一&#xff1a; REPORT ZDCH_09_TEST2. ************************************************************************ * DATEN DEFINITION * *********************************************************************…

【数据结构】二叉树-堆实现及其堆的应用(堆排序topK问题)

文章目录一、堆的概念及结构二、堆的实现1.结构的定义2.堆的初始化3.堆的插入4.堆的向上调整5.堆的删除6.堆的向下调整7.取出堆顶元素8.返回堆的元素个数9.判断堆是否为空10.打印堆中的数据11.堆的销毁三、完整代码1.Heap.h2.Heap.c3.test.c四、堆排序1.堆排序2.建堆3.选数4.完…

Shopee、ebay、亚马逊等跨境卖家了解测评的一篇干货

随着时代的发展&#xff0c;大家越来越喜欢网购&#xff0c;国外也有亚马逊、沃尔码、阿里国际、速卖通、ebay、shopee、Lazada、ozon、temu等等&#xff0c;而国外这些平台也有很大的市场&#xff0c;跨境电商也随时诞生&#xff0c;而当今社会环境实体生意越来越难做&#xf…

DAMA认证|数据治理产业上规模需要做到“三化”

数据治理是开启数据安全体系化建设的第一步&#xff0c;需要从产业层面做大做强&#xff0c;支撑数据安全整体框架&#xff0c;为数据流通提供安全保障&#xff0c;推动促进数字化产业进一步发展。 规模化发展是数据治理产业的瓶颈&#xff0c;行业数字化业务的复杂性和过多的定…

k8s安装tekton,编写task

文章目录一、官方安装二、国内资源安装安装tekton安装dashboard安装CLI三、demo编写task.yaml编写taskRun.yaml使用tkn命令查看参考文章一、官方安装 地址&#xff1a;https://tekton.dev/docs/installation/pipelines/#installing-tekton-pipelines-on-kubernetes 注意&#…

Spring MVC 源码之MultipartResolver 组件

MultipartResolver 组件&#xff0c;内容类型( Content-Type )为 multipart/* 的请求的解析器&#xff0c;主要解析文件上传的请求。例如&#xff0c;MultipartResolver 会将 HttpServletRequest 封装成 MultipartHttpServletRequest 对象&#xff0c;便于获取参数信息以及上传…