学习数据结构(10)栈和队列下+二叉树(堆)上

news2025/2/21 17:47:18

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>链式结构

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

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

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

相关文章

.NET版Word处理控件Aspose.Words教程:使用 C# 删除 Word 中的空白页

Word 文档中的空白页会使其看起来不专业并扰乱流程。用户会遇到需要删除 Word 中的空白页的情况&#xff0c;但手动删除它们需要时间和精力。在这篇博文中&#xff0c;我们将探讨如何使用 C# 删除 Word 中的空白页。 本文涵盖以下主题&#xff1a; C# 库用于删除 Word 中的空…

《代码随想录》刷题笔记——回溯篇【java实现】

文章目录 组合组合总和 III电话号码的字母组合组合总和组合总和II思路代码实现 分割回文串※思路字符串分割回文串判断效率优化※ 复原 IP 地址优化版本 子集子集 II使用usedArr辅助去重不使用usedArr辅助去重 递增子序列※全排列全排列 II重新安排行程题意代码 N 皇后解数独直…

【JavaEE进阶】验证码案例

目 &#x1f332;实现说明 &#x1f384;Hutool介绍 &#x1f333;准备工作 &#x1f334;约定前后端交互接口 &#x1f6a9;接口定义 &#x1f6a9;实现服务器后端代码 &#x1f6a9;前端代码 &#x1f6a9;整体测试 &#x1f332;实现说明 随着安全性的要求越来越⾼…

Qt Creator 5.0.2 (Community)用久了突然变得很卡

目录 1.现象 2.解决方案 1.现象 很久没有用Qt Creator开发项目了&#xff0c;刚刚结束的项目又是用VS2019开发的&#xff1b;这两天刚好有时间去学习一下Qt&#xff0c;刚好要用Qt Creator&#xff0c;结果一打开就没反应&#xff0c;主界面显示出来要好几分钟&#xff0c;最…

阅读论文笔记《Efficient Estimation of Word Representations in Vector Space》

这篇文章写于2013年&#xff0c;对理解 word2vec 的发展历程挺有帮助。 本文仅适用于 Word2Vect 的复盘 引言 这篇论文致力于探索从海量数据中学习高质量单词向量的技术。当时已发现词向量能保留语义特征&#xff0c;例如 “国王 - 男人 女人≈女王”。论文打算借助该特性&am…

初学PADS使用技巧笔记(也许会继续更新)

操作意图&#xff1a;网上找某个芯片封装又不想自己画&#xff0c;再加上没经验&#xff0c;怎么办&#xff1f; 就以AC-DC芯片PN8036为例&#xff0c;打开嘉立创的的DFM&#xff0c;打开立创商城&#xff0c;输入PN8036&#xff0c;点击数据手册&#xff0c;然后点击直接打开…

从无序到有序:上北智信通过深度数据分析改善会议室资源配置

当前企业普遍面临会议室资源管理难题&#xff0c;预约机制不完善和临时会议多导致资源调度不合理&#xff0c;既有空置又有过度拥挤现象。 针对上述问题&#xff0c;上北智信采用了专业数据分析手段&#xff0c;巧妙融合楼层平面图、环形图、折线图和柱形图等多种可视化工具&a…

CAS单点登录(第7版)4.管理

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 管理 概述 Admin Console & 仪表板 CAS 提供了许多可用于管理 CAS 服务器部署的工具和控制板。此类选项通常不是互斥的&#xff0c;旨在协同工作并呈现 CAS 配置和构建的各个方面&am…

Baklib一站式云平台:全场景赋能企业知识资产激活

内容概要 在数字化浪潮推动下&#xff0c;企业知识资产的高效管理与价值释放成为核心议题。Baklib作为一站式云平台&#xff0c;以全场景赋能为核心定位&#xff0c;通过构建知识中台架构&#xff0c;为企业提供从资源整合到应用落地的闭环解决方案。该平台不仅支持文本、图像…

登录弹窗效果

1&#xff0c;要求 点击登录按钮&#xff0c;弹出登录窗口 提示1&#xff1a;登录窗口 display:none 隐藏状态&#xff1b; 提示2&#xff1a;登录按钮点击后&#xff0c;触发事件&#xff0c;修改 display:block 显示状态 提示3&#xff1a;登录窗口中点击关闭按钮&#xff0…

小小小病毒(3)(~_~|)

一分耕耘一分收获 声明&#xff1a; 仅供损害电脑&#xff0c;不得用于非法。损坏电脑&#xff0c;作者一律不负责。此作为作者原创&#xff0c;转载请经过同意。 欢迎来到小小小病毒&#xff08;3&#xff09; 感谢大家的支持 还是那句话&#xff1a;上代码&#xff01; …

【Java 面试 八股文】Spring Cloud 篇

Spring Cloud 篇 1. Spring Cloud 5大组件有哪些&#xff1f;2. 服务注册和发现是什么意思&#xff1f;Spring Cloud 如何实现服务注册发现&#xff1f;3. 我看你之前也用过nacos&#xff0c;你能说下nacos与eureka的区别&#xff1f;4. 你们项目负载均衡如何实现的&#xff1f…

Esxi8.0设置nvidia显卡直通安装最新驱动

ESXI8.0设置显卡直通 在某些情况下&#xff0c;我们需要多次切换操作系统&#xff0c;以测试软件是否适用于特定系统和环境&#xff0c;减少多次重装系统的麻烦 ESXI8.0安装包 通过网盘分享的文件&#xff1a;ESXi-8.0U2-22380479-USB-NVME-集成网卡镜像.iso 链接: https://…

LabVIEW袜品压力测试系统

开发了一种基于LabVIEW开发的袜品压力测试系统。该系统利用LabVIEW并结合灵敏的传感器和高精度的处理模块&#xff0c;实现了对袜品压力的精确测量和分析。系统不同于传统的服装压力测试方法&#xff0c;为研究和评价袜子的舒适性提供了新的测试手段。 ​ 项目背景 该系统的…

TestHubo基础教程-创建项目

TestHubo是一款国产开源一站式测试工具&#xff0c;涵盖功能测试、接口测试、性能测试&#xff0c;以及 Web 和 App 测试&#xff0c;可以满足不同类型项目的测试需求。本文将介绍如何快速创建第一个项目&#xff0c;以快速入门上手。 1、创建项目 在 TestHubo 中&#xff0c;…

深度求索—DeepSeek API的简单调用(Java)

DeepSeek简介 DeepSeek&#xff08;深度求索&#xff09;是由中国人工智能公司深度求索&#xff08;DeepSeek Inc.&#xff09;研发的大规模语言模型&#xff08;LLM&#xff09;&#xff0c;专注于提供高效、智能的自然语言处理能力&#xff0c;支持多种场景下的文本生成、对…

企业使用统一终端管理(UEM)工具提高端点安全性

什么是统一终端管理(UEM) 统一终端管理(UEM)是一种从单个控制台管理和保护企业中所有端点的方法&#xff0c;包括智能手机、平板电脑、笔记本电脑、台式机和 IoT设备。UEM 解决方案为 IT 管理员提供了一个集中式平台&#xff0c;用于跨所有作系统和设备类型部署、配置、管理和…

爱彼(Audemars Piguet):瑞士制表艺术的巅峰之作(中英双语)

爱彼&#xff08;Audemars Piguet&#xff09;&#xff1a;瑞士制表艺术的巅峰之作 在瑞士高级制表界&#xff0c;Audemars Piguet&#xff08;爱彼&#xff09; 以其大胆创新、卓越工艺和独立家族经营的传统&#xff0c;成为世界顶级腕表品牌之一。作为瑞士“三大制表品牌”之…

1134. 国王的魔镜

题目 AC代码 #include<bits/stdc.h> using namespace std; bool hw(char s[]) {bool rtrue;int i;for(i0;i<strlen(s)/2;i){if(s[i]!s[strlen(s)-i-1]){rfalse;break;}}return r; } int main() {char s[1005];gets(s);while(hw(s)true&&strlen(s)%20){s[strl…

浅说树形dp

文章目录 前言树形dp的转移方式树形dp的使用的场景小结 初步感知——简单的树形dp例题1例题2 深入分析——树形dp的经典模型最大独立集最小点覆盖最小支配集树上直径 前言 因为树的形式非常适合递归&#xff0c;他所带来的访问顺序也是非常符合拓扑排序的&#xff0c;故而在处…