一、今日学习
今天主要围绕队列 和二叉树展开学习,并结合链式队列的实现方式进行了深入理解。以下将对各部分进行系统梳理与总结。
二、队列(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 个字符的非空字符串,以回车结束。
注意: 题目保证不存在只有小数点的输入。





