学习数据结构(10)栈和队列下+二叉树(堆)上
1.关于栈和队列的算法题
(1)用队列实现栈

解法一:(参考代码)
题目要求实现六个函数,分别是栈初始化,入栈,移除并返回栈顶元素,返回栈顶元素,判空,栈的销毁
栈初始化:首先创建一个数据结构MyStack,包含两个队列q1,q2,先为Mystack申请内存空间,再调用队列初始化函数为q1,q2初始化
入栈:先判断q1队列是否为空,若为空,则将元素入队列q1,否则将元素入队列q2,即将元素入队列进不为空的队列中,但第一次入队列时,尽管q1,q2都为空,元素仍会入队列q2
移除并返回栈顶元素:将不为空队列中前Size-1个元素入队列进另一个为空的队列中,同时将前Size-1个元素从不为空队列中出队列,则原先不为空队列中只剩一个元素,取队头数据,再将此数据出队列,返回队头数据

返回栈顶元素:返回非空队列的队尾元素
判空:若同时满足队列q1为空和队列q2为空,则MyStack为空
栈的销毁:销毁队列q1和队列q2,释放MyStack的内存空间,将指针置空

(2)用栈实现队列

解法一:(参考代码)
题目要求实现的函数有六个,分别是初始化队列,入队列,从队列开头移除并返回元素,返回队头元素,判空,销毁队列
初始化队列:创建一个数据结构MyQueue,包含栈s1以及栈s2,先为MyQueue申请内存空间,再初始化s1,s2
入队列:规定入队列时,元素进入栈s1中,出队列时,元素从s2出。故调用函数入栈至s1
从队列开头移除并返回元素:若s2不为空,则从s2中出栈,否则先通过循环取s1中的栈顶元素,将s1中的元素全部入栈至s2,同时将s1中元素全部出栈,再从s2中取栈顶元素出栈,并返回此栈顶元素

返回队头元素:若s2不为空,则取s2栈顶元素并返回,否则将s1的全部元素出栈并入栈至s2,再取栈顶元素并返回
判空:当s1和s2都为空时,MyQueue为空
销毁队列:销毁s1,s2,再释放MyQueue的内存空间,将指针置空

2.二叉树
(1)树的概念
树是一种非线性的数据结构,它是由 n ( n>=0 ) 个有限节点组成的一个具有层次关系的集合
根结点:没有前驱节点的节点
除根结点外,其余结点被分成 M(M>0) 个互不相交的集合 T1 、 T2 、…… 、 Tm ,其中每⼀个集合 Ti(1 <= i <= m) 又是⼀棵结构与树类似的子树。每棵子树的根结点有且只有⼀个前驱,可以有 0 个或多个后继,因此,树是递归定义的
树形结构中,子树之间不能有交集,否则就不是树形结构,而是图结构
除了根结点外,每个结点有且仅有一个父结点
一棵N个结点的树有N-1条边
(2)相关术语

父节点/双亲节点:若一个节点含有子节点,则这个节点称为其子节点的父节点
子节点/孩子节点:一个节点含有的子树的根节点称为该节点的子节点
节点的度:一个节点有几个孩子,它的度就是多少
树的度:一棵树中,最大的节点的度称为树的度
叶子节点/终端节点:度为 0 的节点称为叶节点
分支节点/非终端节点:度不为 0 的节点
兄弟节点:具有相同父节点的节点互称为兄弟节点
节点的层次:从根开始定义起,根为第 1 层,根的子节点为第 2 层,以此类推
树的高度或深度:树中节点的最大层次
节点的祖先:从根到该节点所经分支上的所有节点
路径:一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列
子孙:以某节点为根的子树中任一节点都称为该节点的子孙
森林:由 m ( m>0 ) 棵互不相交的树组成的集合称为森林
(3)树的表示方法
树结构相对线性表就比较复杂,要存储表示起来比较麻烦,既要保存值,又要保存节点和节点之间的关系,实际上,树有很多种表示方式,如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等,其中最常用的为孩子兄弟表示法:
struct TreeNode
{ struct Node* child; // 左边开始的第⼀个孩⼦结点struct Node* brother; // 指向其右边的下⼀个兄弟结点int data;
};
(4)二叉树的概念
在树形结构中,最常用的就是二叉树,一棵二叉树是节点的一个有限集合,该集合由一个根节点 加上两棵别称为左子树和右子树的二叉树组成或者为空

二叉树不存在度大于 2 的节点
二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树
(5)二叉树的种类
满二叉树:如果一个二叉树每一层的节点数都达到最大值,则这个二叉树就是满二叉树,也就是说,如果一个二叉树的层数为K ,且节点总数是2^k-1 ,则它就是满二叉树

完全二叉树:完全二叉树是效率很高的数据结构,对于深度为 K 的,有 n 个 结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从 1 至 n 的结点一一对应时称之为完全二叉树,要注意的是满二叉树是一种特殊的完全二叉树

(6)二叉树的性质
若规定节结点的层数为 1 ,则一棵非空二叉树的第i层上最多有2^(i-1)个节点
若规定根节点的层数为1,则深度为 h 的二叉树的最大节点数是2^h-1
若规定根节点的层数为 1 ,具有 n 个节点的满二叉树的深度h=log2(n+1)
(7)二叉树的储存结构
1>顺序结构
顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费,完全二叉树更适合使用顺序结构存储

实际上,通常把堆(一种二叉树)使同顺序结构的数组来存储
2>链式结构
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系,通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址

相关文章:
学习数据结构(10)栈和队列下+二叉树(堆)上
1.关于栈和队列的算法题 (1)用队列实现栈 解法一:(参考代码) 题目要求实现六个函数,分别是栈初始化,入栈,移除并返回栈顶元素,返回栈顶元素,判空࿰…...
.NET版Word处理控件Aspose.Words教程:使用 C# 删除 Word 中的空白页
Word 文档中的空白页会使其看起来不专业并扰乱流程。用户会遇到需要删除 Word 中的空白页的情况,但手动删除它们需要时间和精力。在这篇博文中,我们将探讨如何使用 C# 删除 Word 中的空白页。 本文涵盖以下主题: C# 库用于删除 Word 中的空…...
《代码随想录》刷题笔记——回溯篇【java实现】
文章目录 组合组合总和 III电话号码的字母组合组合总和组合总和II思路代码实现 分割回文串※思路字符串分割回文串判断效率优化※ 复原 IP 地址优化版本 子集子集 II使用usedArr辅助去重不使用usedArr辅助去重 递增子序列※全排列全排列 II重新安排行程题意代码 N 皇后解数独直…...
【JavaEE进阶】验证码案例
目 🌲实现说明 🎄Hutool介绍 🌳准备工作 🌴约定前后端交互接口 🚩接口定义 🚩实现服务器后端代码 🚩前端代码 🚩整体测试 🌲实现说明 随着安全性的要求越来越⾼…...
TCP/UDP 简介,三次握手与四次挥手
一、TCP 三次握手 目的:为了解决在不可靠的信道上建立可靠的网络连接 三次握手是连接请求的过程: A 发送连接请求的数据给 B(发送 SYN 包) B 同意连接,返回数据给 A(返回 SYNACK 包) A 收到后回…...
C++之线程池(Thread Pool)
1.介绍 线程池是一种并发编程的设计模式,用于管理和复用多个线程。以避免频繁创建和销毁线程的开销。线程池的核心思想是预先创建一组线程,并将任务分配给这些线程执行,从而提高程序的性能和资源利用率。 2.线程池的核心组件 一个经典的线程…...
Django中实现简单易用的分页工具
如何在Django中实现简单易用的分页工具?📚 嗨,小伙伴们!今天我们来看看如何在 Django 中实现一个超简单的分页工具。无论你是在处理博客文章、产品列表,还是用户评论,当数据量一大时,分页显得尤…...
【kafka系列】Exactly Once语义
目录 1. Exactly-Once语义的定义 2. Kafka实现Exactly-Once的机制 3. 端到端Exactly-Once示例 场景描述 3.1 生产者配置与代码 3.2 消费者配置与代码 4. 异常场景与Exactly-Once保障 场景1:生产者发送消息后宕机 场景2:消费者处理消息后宕机 场…...
export default与export区别
1.定义: export default:用于导出模块中的默认成员。一个模块中只能有一个export default,通常用于导出模块的主要功能或对象。导入时可以使用任意名称,因为它没有具体的名称 export:用于导出模块中的多个成…...
Qt Creator 5.0.2 (Community)用久了突然变得很卡
目录 1.现象 2.解决方案 1.现象 很久没有用Qt Creator开发项目了,刚刚结束的项目又是用VS2019开发的;这两天刚好有时间去学习一下Qt,刚好要用Qt Creator,结果一打开就没反应,主界面显示出来要好几分钟,最…...
Windows搭建CUDA大模型Docker环境
Windows搭建CUDA大模型Docker环境 一、安装Docker二、拉取镜像三、启动容器四、安装依赖环境五、安装Miniconda3六、设置pip源地址 一、安装Docker windows中docker安装教程 二、拉取镜像 系统:Ubuntu20.04CUDA版本:11.8.0 docker pull nvcr.io/nvid…...
阅读论文笔记《Efficient Estimation of Word Representations in Vector Space》
这篇文章写于2013年,对理解 word2vec 的发展历程挺有帮助。 本文仅适用于 Word2Vect 的复盘 引言 这篇论文致力于探索从海量数据中学习高质量单词向量的技术。当时已发现词向量能保留语义特征,例如 “国王 - 男人 女人≈女王”。论文打算借助该特性&am…...
初学PADS使用技巧笔记(也许会继续更新)
操作意图:网上找某个芯片封装又不想自己画,再加上没经验,怎么办? 就以AC-DC芯片PN8036为例,打开嘉立创的的DFM,打开立创商城,输入PN8036,点击数据手册,然后点击直接打开…...
C#学习之数据转换
目录 一、创作说明 二、数据类型之间的转换 1.数据类型之间的转换表格 2.代码示例 三、进制之间的转换 1.进制之间的转换表格 2.代码示例 四、ASCII 编码和字符之间的转换 1.ASCII 编码和字符之间的转换表格 2.代码示例 五、总结 一、创作说明 C#大多数时候都是和各…...
从无序到有序:上北智信通过深度数据分析改善会议室资源配置
当前企业普遍面临会议室资源管理难题,预约机制不完善和临时会议多导致资源调度不合理,既有空置又有过度拥挤现象。 针对上述问题,上北智信采用了专业数据分析手段,巧妙融合楼层平面图、环形图、折线图和柱形图等多种可视化工具&a…...
JavaScript 中toLocaleString()的基本用法
toLocaleString() 是 JavaScript 中多个内置对象(如 Number、Date、Array 等)都拥有的方法,其作用是将对象的值转换为符合特定语言环境的字符串表示形式。下面分别介绍不同对象使用该方法的具体用法。 1. Number.prototype.toLocaleString()…...
CAS单点登录(第7版)4.管理
如有疑问,请看视频:CAS单点登录(第7版) 管理 概述 Admin Console & 仪表板 CAS 提供了许多可用于管理 CAS 服务器部署的工具和控制板。此类选项通常不是互斥的,旨在协同工作并呈现 CAS 配置和构建的各个方面&am…...
Baklib一站式云平台:全场景赋能企业知识资产激活
内容概要 在数字化浪潮推动下,企业知识资产的高效管理与价值释放成为核心议题。Baklib作为一站式云平台,以全场景赋能为核心定位,通过构建知识中台架构,为企业提供从资源整合到应用落地的闭环解决方案。该平台不仅支持文本、图像…...
登录弹窗效果
1,要求 点击登录按钮,弹出登录窗口 提示1:登录窗口 display:none 隐藏状态; 提示2:登录按钮点击后,触发事件,修改 display:block 显示状态 提示3:登录窗口中点击关闭按钮࿰…...
文本表示方法
词向量 独热编码模型和分布式表征模型 独热编码分布式表征固定长度的稠密词向量优点一个单词一个维度,彼此之间构成标准正交向量组数字化后的数值可以表示语义上的关系缺点稀疏,词向量维度大导致计算效率低 独热编码会根据语料库中的单词个数,来确定词…...
小小小病毒(3)(~_~|)
一分耕耘一分收获 声明: 仅供损害电脑,不得用于非法。损坏电脑,作者一律不负责。此作为作者原创,转载请经过同意。 欢迎来到小小小病毒(3) 感谢大家的支持 还是那句话:上代码! …...
微软AutoGen高级功能——Memory
介绍 大家好,博主又来给大家分享知识了。这次又要给大家分享什么呢?哈哈。这次要给大家分享的是微软AutoGen框架的高级且重要的功能:Memory。在微软AutoGen中,Memory(记忆)是一个重要概念,它主要用于存储和管理智能体…...
Debezium系列之:时区转换器,时间戳字段转换到指定时区
Debezium系列之:时区转换器,时间戳字段转换到指定时区 示例:基本配置应用TimezoneConverter SMT的效果示例:高级配置配置选项当Debezium发出事件记录时,记录中的时间戳字段的时区值可能会有所不同,这取决于数据源的类型和配置。为了在数据处理管道和应用程序中保持数据一…...
【Java 面试 八股文】Spring Cloud 篇
Spring Cloud 篇 1. Spring Cloud 5大组件有哪些?2. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?3. 我看你之前也用过nacos,你能说下nacos与eureka的区别?4. 你们项目负载均衡如何实现的?…...
Esxi8.0设置nvidia显卡直通安装最新驱动
ESXI8.0设置显卡直通 在某些情况下,我们需要多次切换操作系统,以测试软件是否适用于特定系统和环境,减少多次重装系统的麻烦 ESXI8.0安装包 通过网盘分享的文件:ESXi-8.0U2-22380479-USB-NVME-集成网卡镜像.iso 链接: https://…...
LabVIEW袜品压力测试系统
开发了一种基于LabVIEW开发的袜品压力测试系统。该系统利用LabVIEW并结合灵敏的传感器和高精度的处理模块,实现了对袜品压力的精确测量和分析。系统不同于传统的服装压力测试方法,为研究和评价袜子的舒适性提供了新的测试手段。 项目背景 该系统的…...
TestHubo基础教程-创建项目
TestHubo是一款国产开源一站式测试工具,涵盖功能测试、接口测试、性能测试,以及 Web 和 App 测试,可以满足不同类型项目的测试需求。本文将介绍如何快速创建第一个项目,以快速入门上手。 1、创建项目 在 TestHubo 中,…...
3.3 企业级AI Agent工程实践:从API设计到高可用架构的全栈开发指南
企业级AI Agent工程实践:从API设计到高可用架构的全栈开发指南 引言:AI Agent开发中的工程化挑战 据2024年DevOps状态报告,AI Agent项目的失败案例中**61%**源于工程实现缺陷。本文将基于GitHub Sentinel的实战案例,揭示如何构建支持百万级请求的工业级Agent系统,涵盖AP…...
解锁二进制数组:JS、TS、ArkTS 解析
二进制数组基础入门 在编程的世界里,二进制数组就像是一把隐藏的钥匙,虽然不常被提及,但却在许多关键领域发挥着至关重要的作用。从计算机的底层硬件到前端的高性能计算,二进制数组都有着广泛的应用。 在计算机科学中࿰…...
C# windowForms 的DataGridView控件的使用
C# Windows Forms DataGridView 控件使用详解 DataGridView 是 Windows Forms 中用于显示和编辑表格数据的核心控件。它支持高度自定义的列类型、数据绑定、事件处理和丰富的样式配置。以下是其详细使用方法。 目录 基础使用 数据绑定 列类型与自定义...
