当前位置: 首页 > article >正文

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

目录

一、队列

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.kler.cn/a/283443.html

相关文章:

  • 网络安全-蓝队基础
  • 实时渲染技术如何助力3D虚拟展厅?
  • 编译ffmpeg动态库时设置RPATH为$ORIGIN
  • 少儿学习Scratch编程的好处和坏处
  • R语言机器学习与临床预测模型69--机器学习模型解释利器:SHAP
  • 大数据技术在金融风控中的应用
  • MySQL最左匹配原则
  • DAMA数据管理知识体系(第3章 数据治理)
  • 【STM32】驱动OLED屏
  • 2024高教社杯”全国大学生数学建模竞赛保奖秘诀!!!
  • 众安保险0827一面
  • UnrealEngine学习(02):虚幻引擎编辑器界面详解
  • 【DSP+FPGA】基于DSP+FPGA XC7K325T与TMS320C6678的通用信号处理平台
  • 力扣面试经典算法150题:整数转罗马数字
  • 91.游戏的启动与多开-游戏启动
  • Live800:以客户为中心,构建全方位客户服务策略
  • ThinkPHP之入门讲解
  • C++(this指针/常函数与常对象/拷贝构造函数/赋值函数/静态成员/静态成员函数/单列模式)
  • pdf、mp4、zip、rar、jpg等文件被大量访问造成流量超标解决方案
  • 腾讯提出一种新的针对风格化角色和逼真服装动画的生成3D运动转移方法,生成效果逼真!
  • Excel中使用VBS自定义函数将中文转为拼音首字母
  • MySQL内部临时表(Using temporary)案例详解及优化解决方法
  • 快速了解FlashInfer
  • [CTF]-Reverse:Reverse做题笔记
  • defineProps、defineEmits、 defineExpose的TS写法
  • python os获取当前git目录的git用户