数据结构---循环队列---树的基本概念

news2024/11/15 8:59:41

目录

一、队列

1.1.队列

1.创建循环队列(顺序结构)

2.判断队满

3.判断队空

4.进队

5.出队

6.销毁

二、树

2.1.树的特点

2.2.基本概念

1.根节点

2.分支节点

3.叶节点

4.层

5.深度

6.高度

7.度

2.3.二叉树

1.特点

2.遍历方式

2.4.满二叉树

2.5.完全二叉树 

三、总结


一、队列

1.1.队列

        非循环队列,假设一直进队当队存满时,会出现假溢出显现为了避免,故此有了循环队列; 

        循环队列,开始头和尾都指向同一个位置。在出队入队的过程中,head和tail都会再次回到最开始的位置。因此,head==tail时,队列为空;tail%len+1 == head时,  队列满。元素从队尾入队,tail = (tail+1) % len;元素从队头出队,head = (head+1)% len;  

        队列的元素个数,假设由最大容量为n,并预留一个空位置来判断满的标志,则队列元素为:(tail-head+n)% n; 

1.创建循环队列(顺序结构)

SeqQueue *CreateSeqQueue(int MaxLen)
{
    SeqQueue *pTmpQueue = NULL;
    
    pTmpQueue = malloc(sizeof(SeqQueue));
    if (NULL == pTmpQueue)
    {
        return NULL;
    }

    pTmpQueue->Head = pTmpQueue->Tail = 0;
    pTmpQueue->Len = MaxLen;
    pTmpQueue->pData = malloc(sizeof(DataType) * MaxLen);
    if (NULL == pTmpQueue->pData)
    {
        return NULL;
    }

    return pTmpQueue;
}

2.判断队满

int IsFullSeqQueue(SeqQueue *pTmpQueue)
{
    return (pTmpQueue->Tail + 1) % pTmpQueue->Len == pTmpQueue->Head ? 1 : 0;
}

3.判断队空

int IsEmptySeqQueue(SeqQueue *pTmpQueue)
{
    return pTmpQueue->Head == pTmpQueue->Tail ? 1 : 0;
}

4.进队

int EnterSeqQueue(SeqQueue *pTmpQueue, DataType TmpData)
{
    if (IsFullSeqQueue(pTmpQueue))
    {
        return -1;
    }

    pTmpQueue->pData[pTmpQueue->Tail] = TmpData;
    pTmpQueue->Tail = (pTmpQueue->Tail + 1) % pTmpQueue->Len;

    return 0;
}

5.出队

DataType QuitSeqQueue(SeqQueue *pTmpQueue)
{
    DataType TmpData;

    TmpData = pTmpQueue->pData[pTmpQueue->Head];
    pTmpQueue->Head = (pTmpQueue->Head + 1) % pTmpQueue->Len;

    return TmpData;
}

6.销毁

int DestroySeqQueue(SeqQueue **ppTmpQueue)
{
    free((*ppTmpQueue)->pData);
    free(*ppTmpQueue);
    *ppTmpQueue = NULL;

    return 0;
}

二、树

2.1.树的特点

只有一个前驱,但可以有很多后继;

2.2.基本概念

1.根节点

没有前驱;

2.分支节点

既有前驱又有后继;

3.叶节点

没有后继;

4.层

根节点为第一层,往后逐层+1;

5.深度

根节点到叶子节点的最大层数;

6.高度

从叶子节点到根节点经过的最大节点数;

7.度

节点后继的个数;

2.3.二叉树

1.特点

所有节点的度最大为2; 

2.遍历方式

前序遍历、中序遍历、后序遍历、层次遍历 

2.4.满二叉树

每一次节点达到最大个数;

2.5.完全二叉树 

所有节点展开后,节点编号排列连续;

二叉树第k层最多有2^(k-1)个节点;

满二叉树有k层,则所有节点数为 2^k -1

三、总结

        循环队列的循环思想很重要,也要知道为啥要使用循环队列,循环队列是如何实现循环的,如何判断队空,对满;树呢,二叉树是用的最多的,其中要分清满二叉树和完全二叉树;还有就是满二叉树中的节点个数的计算。

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

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

相关文章

编程要由“手动挡”变“自动挡”了?Cursor+Claude-3.5-Sonnet,Karpathy大神点赞的AI代码神器!如何使用详细教程

Cursor情况简介 AI大神Andrej Karpathy都被震惊了!他最近在试用 VS Code Cursor Claude Sonnet 3.5,结果发现这玩意儿比GitHub Copilot还好用! Cursor在短短时间内迅速成为程序员群体的顶流神器,其背后的原因在于其默认使用Open…

在postman中使用javascript脚本生成sign签名

大多数线上api接口服务都需要提供签名才可以正常访问。虽然带来了安全,单有时为了快速验证接口的某个功能,就不得不编写代码,计算签名然后再请求。那么,使用postman提供的script功能,是否能实现签名计算功能吗&#xf…

HarmonyOS开发实战( Beta5版)滑动白块问题解决最佳实践

当应用程序需要使用列表显示内容时,通常会使用ListLazyForEach组件来实现。但是列表中需要显示耗时加载的内容时,仅依靠ListLazyForEach不足以获得最优的用户体验。例如显示在线网络图片,在弱网以及快速滑动浏览的场景下,由于来不…

哪种无线可视挖耳勺最实用?五大优良黑马机型测评

无线可视挖耳勺是热度特别高的个人清洁工具,不仅能够更加清晰地观察自己耳内的状况,从而更加安全、有效地清洁耳朵,可以发挥多种多样的作用,但也存在品牌繁杂的情况,其中还有一些不专业的产品。在市面上,我…

Win11 本地部署大模型 WebUI + ComfyUI

Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 Web 用户界面(WebUI),它被设计用于完全离线操作。该项目最初被称为 Ollama WebUI,后来更名为 Open WebUI。Open WebUI 的主要目的是为本地的大语言模型(LLMs&…

一条执行24s的SQL产生7小时主备延时(案例详解)

前言 在之前的文章《一条执行24s的SQL竟产生7小时数据延时,数据库高可用做了个寂寞》中,我们描述了一个问题现象:一条在主库执行24秒的SQL语句,却导致了主从延时长达7小时。文章发布后,引发了小伙伴的热烈讨论&#x…

zabbix安装过程中仓库不可用问题解决

官网文档安装zabbix-server:Download and install Zabbix 安装zabbix-server过程中碰到如下报错: 导致原因是仓库url被qiang,创建如下仓库: 仓库文件: [centos-sclo-rh] nameCentOS-7 - SCLo rh baseurlhttps://mirr…

6 款 AI 视频全自动国产剪辑软件推荐

这两年刷抖音、B站,你是不是也常看到AI做的视频火得一塌糊涂,流量爆棚,还帮作者赚了钱?那没学过剪辑的你,想不想零成本、零门槛,也用AI软件赚点外快呢?告诉你,绝对行得通!现在AI技术牛了,网上…

顺序表

目录 1. 数据结构 2. 顺序表 1)线性表 2)顺序表分类 3、动态顺序表的实现 1. 数据结构 数据:常见的数值1、2、3、4.....、教务系统里保存的用户信息(姓名、性别、年龄、学历等 等)、网页里肉眼可以看到的信息&…

ARM体系结构及接口技术(四)LED灯实验---Makefile文件解析

文章目录 一、汇编版本二、C语言版本(一)Makefile文件1. .elf文件2. .map文件3. wildcard函数4. patsubst函数 (二)map.lds(三)start.S 一、汇编版本 # 工程名对应的变量 NAMEasm-led# 交叉编译器的前缀的…

十、软件工程基础知识(考点篇)试题

降低需求变更成本,第一想到的就是原型法,后面对于已完成开发工作的的反馈意见,已完成开发工作只有增量式的吧,先开发核心的,然后发布一版,得到用户反馈再修改并开发次核心。快速原型强调的是,先…

BP神经网络学习内容分享:数据降维

在数据分析和机器学习的领域中,数据降维是一项非常重要的技术。它旨在减少数据集中的特征数量,同时尽可能保留原始数据的重要信息。这不仅有助于减少计算复杂度和提高算法效率,还能有效避免过拟合,提升模型的泛化能力。本文将简要…

数学建模--皮尔逊相关系数、斯皮尔曼相关系数

目录 1.总体的皮尔逊相关系数 2.样本的皮尔逊相关系数 3.对于皮尔逊相关系数的认识 4.描述性统计以及corr函数 ​编辑 5.数据导入实际操作 6.引入假设性检验 6.1简单认识 6.2具体步骤 7.p值判断法 8.检验正态分布 8.1jb检验 8.2威尔克检验:针对于p值进行…

【单片机原理及应用】实验:数字秒表显示器

目录 一、实验目的 二、实验内容 三、实验步骤 四、记录与处理 五、思考 六、成果文件提取链接 一、实验目的 熟悉中断和定时/计数器工作原理,掌握定时器的C51编程与调试方法。 二、实验内容 【参照图表】 图A.6 (1)创建一个包含80C51固…

【OWOD论文】开放世界中OD代码_2_模型部分

简介 本文记录OWOD代码中的模型代码部分。数据部分可看我上一个博客【【OWOD论文】开放世界中OD代码_1_数据部分-CSDN博客】 模型代码 1 起步 在代码中找到 detectron2\engine\defaults.py DefaultTrainer类 __init__方法 根据上述 build_model 回溯到 detectron2\modeling\…

OCC笔记:Windows下OCC的编译

一、源码下载 进OCC官网下载https://dev.opencascade.org/release即可,或直接Clone它的Git库https://dev.opencascade.org/resources/git_repository,本文用的源码库版本为7.4.0(我本机安装的VS2013,我又想用到AIS_ViewCube&…

使用Blender云渲染的好处是什么?

​Blender是一款功能强大的开源3D创作软件,用于包括建模、动画、仿真、渲染、合成和视频编辑在内的多种应用。然而,Blender的渲染过程有时可能非常耗费资源,特别是处理复杂的3D场景时。作为CG行业不可或缺的一部分,云渲染通过使用…

chat2DB体验

文章目录 Chat2DB体验的印象Chat2DB是什么?流水帐数据库示例新建数据表生成测试数据查询数据特殊查询 Chat2DB 体验的印象 主页是https://chat2db-ai.com/ 因为最近物理研究需要用到很多数据,所以试用了一个号称神级AI数据库系统。 首先, …

【论文解析】基于脉动阵列的层融合注意力模型加速器结构

作者及发刊详情 刘晓航, 姜晶菲, 许金伟. 基于脉动阵列的层融合注意力模型加速器结构[J]. Computer Engineering & Science/Jisuanji Gongcheng yu Kexue, 2023, 45(5). 摘要 正文 主要工作贡献 1))提出了硬件协同控制的注意力机制矩阵分块方法 2&#xf…

数据仓库系列14:数据清洗和转换的常见方法有哪些?

数据仓库的建立不仅仅是数据的简单存储,更是对数据的深度利用。而数据清洗和转换是确保数据质量和一致性的重要环节。在这篇文章中,我们将深入探讨数据清洗和转换的常见方法,帮助你在数据仓库中更高效地处理数据。 目录 为什么数据清洗和转换…