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

目录

一、队列

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.创建循环队列(顺序结构)

cpp 复制代码
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.判断队满

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

3.判断队空

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

4.进队

cpp 复制代码
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.出队

cpp 复制代码
DataType QuitSeqQueue(SeqQueue *pTmpQueue)
{
    DataType TmpData;

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

    return TmpData;
}

6.销毁

cpp 复制代码
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

三、总结

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

相关推荐
~yY…s<#>1 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
XuanRanDev2 小时前
【每日一题】LeetCode - 三数之和
数据结构·算法·leetcode·1024程序员节
代码猪猪傻瓜coding2 小时前
力扣1 两数之和
数据结构·算法·leetcode
南宫生4 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
weixin_432702264 小时前
代码随想录算法训练营第五十五天|图论理论基础
数据结构·python·算法·深度优先·图论
passer__jw7675 小时前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
爱吃生蚝的于勒6 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~6 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
脉牛杂德6 小时前
多项式加法——C语言
数据结构·c++·算法
一直学习永不止步7 小时前
LeetCode题练习与总结:赎金信--383
java·数据结构·算法·leetcode·字符串·哈希表·计数