数据结构:队列,二叉树

一、今日学习

今天主要围绕队列二叉树展开学习,并结合链式队列的实现方式进行了深入理解。以下将对各部分进行系统梳理与总结。


二、队列(Queue)

1. 基本概念

  • 队列是一种**先进先出(FIFO)**的线性数据结构。

  • 操作受限:仅允许在队尾(rear)插入 (入队),在队头(front)删除(出队)。

2. 队列的特点

  • 插入与删除操作分别在队列的两端进行。

  • 适用于需要按顺序处理的场景,如任务调度、缓冲区管理等。

3. 队列的存储结构

(1)顺序队列
  • 使用数组实现,需处理"假溢出"问题。

  • 常通过循环队列优化空间利用率。

(2)链式队列
  • 使用链表实现,无需预先分配固定空间。

  • 动态内存分配,适合元素数量变化较大的场景。

  • 结构包含头指针(front)和尾指针(rear),分别指向队头与队尾节点。

4. 队列的基本操作

  • 入队(Enqueue):在队尾插入元素

  • 出队(Dequeue):在队头删除元素

  • 判空(IsEmpty)

  • 获取队头元素(GetFront)

5. 链式队列的实现要点

  • 节点结构包含数据域与指针域。

  • 初始化时 front 与 rear 均指向空。

  • 出队时需处理队列仅有一个节点的情况,避免 rear 成为野指针。


三、二叉树(Binary Tree)

1. 树的基本概念

  • 树是一对多的非线性数据结构。

  • 基本术语:

    • 根节点、分支节点、叶子节点

    • 前驱(祖先)与后继(子孙)

    • 度(入度、出度)

    • 层、高度、深度

2. 二叉树的定义与性质

  • 每个节点最多有两个子节点(左孩子、右孩子)。

  • 性质:

    • 第 k 层最多有 2k−12k−1 个节点

    • 前 k 层最多有 2k−12k−1 个节点

  • 特殊二叉树:

    • 满二叉树:所有叶子节点在同一层

    • 完全二叉树:节点编号连续,适合数组存储

3. 二叉树的遍历

遍历方式分为两大类:

(1)深度优先遍历(DFS)
  • 前序遍历:根 → 左 → 右

  • 中序遍历:左 → 根 → 右

  • 后序遍历:左 → 右 → 根

(2)广度优先遍历(BFS)
  • 层序遍历:按层从左到右访问节点,通常借助队列实现。

4. 二叉树的应用场景

  • 表达式树

  • 文件系统结构

  • 搜索与排序(如二叉搜索树)

  • 哈夫曼编码等


四、队列与二叉树的联系

  • 二叉树的层序遍历常借助队列实现,依次将每层节点入队、出队访问。

  • 队列作为辅助结构,在二叉树的各种非递归遍历算法中均有应用。


今日练习

1.利用栈实现队列的功能,完成先进先出,后出后出的功能 1 2 3 4 5 1 2 3 4 5。

2.本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。

输入格式:

输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。

注意: 题目保证不存在只有小数点的输入。

相关推荐
杜家老五2 小时前
综合实力与专业服务深度解析 2026北京网站制作公司六大优选
数据结构·算法·线性回归·启发式算法·模拟退火算法
寄存器漫游者2 小时前
数据结构:带头节点单链表
c语言·数据结构
鹿角片ljp2 小时前
力扣9.回文数-转字符双指针和反转数字
java·数据结构·算法
梦梦代码精3 小时前
开源、免费、可商用:BuildingAI一站式体验报告
开发语言·前端·数据结构·人工智能·后端·开源·知识图谱
what丶k6 小时前
深度解析:以Kafka为例,消息队列消费幂等性的实现方案与生产实践
java·数据结构·kafka
爱敲代码的TOM8 小时前
基础算法技巧总结2(算法技巧零碎点,基础数据结构,数论模板)
数据结构·算法
惊讶的猫8 小时前
InnoDB选用B+树作为索引的原因
数据结构·b树
历程里程碑8 小时前
子串-----和为 K 的子数组
java·数据结构·c++·python·算法·leetcode·tornado
liu****8 小时前
Qt进阶实战:事件处理、文件操作、多线程与网络编程全解析
开发语言·网络·数据结构·c++·qt