编程基础:核心结构与算法(3)

一、分支结构之switch语句

(一)基础特性与语法

  • 适用场景:仅支持**整型、字符型**数据的等值匹配,无法处理区间或复杂逻辑判断。

  • 核心语法要素:

  • 括号内为整型或字符型表达式,用于匹配后续case值。

  • case后接整型常量或字符常量,对应匹配成功后执行的代码块。

  • break:用于结束当前switch分支,若缺失会继续执行下一个case代码(穿透现象)。

  • default:所有case均不匹配时执行,位置可灵活调整(通常放末尾)。

(二)典型应用场景

  1. 按日期判断状态
  • 需求:1、3、5日休息,2、4、6、7日上课,输入其他数字提示无效。

  • 逻辑:多个case可共用同一执行代码(如case1、3、5共用"休息"逻辑),最后用`break`结束分支。

  1. **简易计算器(+、-、*、/)**
  • 需求:输入两个整数和一个运算符,输出计算结果,需处理除法除数为0的异常。

  • 逻辑:按运算符(+、-、*、/)匹配case,除法分支中先判断除数是否为0,再执行计算或提示错误;输入无效运算符时触发`default`。

(三)与if语句的区别

  • switch:仅能做等值判断,适合固定值匹配场景,结构更清晰。

  • if:可做等值、区间、逻辑关系等复杂判断,适用范围更广。

二、循环结构

循环用于重复执行同一操作,核心包含**初始化变量、循环条件、循环操作、迭代变量**四要素。

(一)基础循环类型

  1. while循环
  • 执行逻辑:先判断,再执行。若初始条件不满足,循环体一次都不执行。

  • 适用场景:不确定循环次数,仅知道循环终止条件(如持续接收用户输入直到输入特定值)。

  1. do...while循环
  • 执行逻辑:先执行,再判断。循环体至少执行一次,再根据条件决定是否继续。

  • 适用场景:需要确保循环体至少运行一次的场景(如用户登录验证,至少让用户输入一次账号密码)。

  1. for循环
  • 执行逻辑:先判断,再执行,将"初始化、条件、迭代"整合在同一行,结构更紧凑。

  • 特性:初始化变量仅执行一次,可定义在循环内(作用域仅限循环)或循环外;循环中的两个分号不可省略。

  • 适用场景:已知循环次数的场景(如遍历固定长度的数组、计算1到100的和)。

(二)循环的扩展应用

  • 嵌套循环:循环内部再嵌套循环,常用于复杂场景(如打印99乘法表、打印矩形/菱形等图形)。

  • 典型算法场景:通过循环实现枚举法(如百钱买百鸡问题)、斐波那契数列、韩信点兵等经典数学问题求解。

三、哈夫曼树(最优二叉树)

哈夫曼树是带权路径长度(WPL)最短的二叉树,核心用于数据压缩、编码等领域。

(一)核心概念与构建规则

  • 带权路径长度(WPL):树中所有叶子节点的权值乘以其到根节点的路径长度之和,构建目标是让WPL最小。

  • 构建步骤:

  1. 初始:将所有带权节点作为独立二叉树,按权值从小到大排序。

  2. 合并:每次选取权值最小的两个节点,合并为一个新节点(新节点权值为两子节点权值之和),将新节点加入集合后重新排序。

  3. 终止:重复合并步骤,直到集合中仅剩一个节点,该节点即为哈夫曼树的根节点。

(二)优先队列的应用

  • 构建过程中,需频繁获取权值最小的节点,常用优先队列(最小堆)实现高效操作,默认按权值从小到大输出,可通过重写运算符调整排序规则。

(三)节点结构与遍历

  • 节点构成:包含权值、左子节点、右子节点(可通过指针或数组下标关联)。

  • 遍历方式:通常采用前序遍历,可输出树的结构及各节点的权值,辅助验证树的正确性。

相关推荐
靠沿6 小时前
Java数据结构初阶——LinkedList
java·开发语言·数据结构
Elias不吃糖7 小时前
LeetCode每日一练(209, 167)
数据结构·c++·算法·leetcode
铁手飞鹰7 小时前
单链表(C语言,手撕)
数据结构·c++·算法·c·单链表
悦悦子a啊7 小时前
项目案例作业(选做):使用文件改造已有信息系统
java·开发语言·算法
小殊小殊7 小时前
【论文笔记】知识蒸馏的全面综述
人工智能·算法·机器学习
无限进步_8 小时前
C语言动态内存管理:掌握malloc、calloc、realloc和free的实战应用
c语言·开发语言·c++·git·算法·github·visual studio
hweiyu008 小时前
数据结构:循环链表
数据结构·链表
im_AMBER8 小时前
AI井字棋项目开发笔记
前端·笔记·学习·算法
Wadli8 小时前
项目2 |内存池1|基于哈希桶的多种定长内存池
算法
TT哇8 小时前
【BFS 解决拓扑排序】3. ⽕星词典(hard)
redis·算法·宽度优先