数据结构
文章平均质量分 80
呋喃吖
编程使我快乐
展开
-
【数据结构】聊聊红黑树的那些事(C++)
前置数据结构知识:二叉树的概念;二叉搜索树的概念和查找插入操作实现;AVL树的概念和左旋右旋 左右旋 右左旋的操作,最好能够基本实现一下其代码;红黑树是什么?它是前提是一个颗二叉搜索树,然后在二叉搜索树的前提下增加了一定的规则,使得红黑树能够成为一种接近于平衡的二叉搜索树,并且不失去其查找效率;那么红黑树必须满足什么样的规则?注意:红黑树这里的路径不是任意结点到叶子结点,而是到达所谓的NIL结点(其实就是空结点);比如上面的路径如果是平时的树,就有5路径,而在红黑树有11条路径;通过对任何一条从根到叶子的原创 2022-06-01 18:10:44 · 391 阅读 · 7 评论 -
【数据结构】二叉搜索树的代码实现(C++)
前言普通的二叉树的增删查改是没有任何意义的;所以当我们给树加以一些规则他就会发挥很大的作用;二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值; 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值; 它的左右子树也分别为二叉搜索树; 默认情况下二叉树排序树的数据是不可以有冗余的,相同的数据是不可以再二叉搜索树里;比如这颗二叉搜索树:二叉搜索树,又叫搜索二叉树,也叫二叉排序树原创 2022-04-25 19:45:17 · 3091 阅读 · 2 评论 -
【数据结构】二叉树递归遍历方式和常见的二叉树玩法
文章目录普通二叉树二叉树的遍历二叉树遍历代码实现理解递归遍历二叉树的调用过程求二叉树的结点个数普通二叉树我们之前讲过完全二叉树的应用:【堆的数据结构】,在次我们使用的是顺序表来存储完全二叉树;但是对于普通的二叉树,是不建议使用顺序表的结构来存储的,会浪费空间,所以,我们搞出了一个链式存储结构来存储普通二叉树;对于普通二叉树我们需要明白几点:普通二叉树的增删查改是没有任何意义的,因为普通二叉树增删查改的结构过于复杂,没有必要一定要用二普通二叉树的方式去增删查改;对于普通二叉树我们需要关注的问题原创 2021-11-13 17:07:58 · 1246 阅读 · 1 评论 -
【数据结构】堆 和 堆的应用TopK问题
二叉树的顺序存储结构普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。如上图所示,如果使用顺序存储的话(即用数据存储),此时,非完全二叉树是会有空间浪费的,而完全二叉树不会;有人说,直接把非完全二叉树的 4 ,5 的位置移到空出来的位置不就好了嘛?这样是不可以的,二叉树原创 2021-11-07 22:19:59 · 274 阅读 · 3 评论 -
【数据结构】链式队列的实现
链式队列的结构typedef int QDataType;typedef struct QueueNode{ QDataType data; struct QueueNode* next;}QueueNode;typedef struct Queue{ QueueNode* head; QueueNode* tail;}Queue;由于使用链表实现队列,所以我们需要一个队列结点QueueNode,保存值域和指向下一节点的指针;由于队列的功能为对头出队,队尾入队,所以设计两个指原创 2021-11-04 21:11:10 · 346 阅读 · 0 评论 -
【数据结构】树 二叉树 满二叉树 完全二叉树初步理解
文章目录树的相关基本术语树的表示形式树结构典型应用场景二叉树基本概念满二叉树概念及其性质完全二叉树的概念和性质一道完全二叉树的面试题树的相关基本术语节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I…等节点为叶节点非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G…等节点为分支节点双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点孩子节点或子节原创 2021-11-04 17:30:50 · 2605 阅读 · 6 评论 -
【数据结构】顺序栈
一 什么是栈栈就是一种专有名词,没什么高大上的。栈也是线性表的一种,就同顺序表,链表都是线性表一样。但既然都是顺序表,为啥,分那么多名称呢?我就打个比喻,一个公司,是不是又经理,员工等分工呀?那他们分工为了什么,不就是为了提高效率工作嘛,栈的出现也是这样,为了满足一些特殊场景而设计出来的东西,这个场景就是后进先出的场景,也就是只能在表的一端上的一个元素进行插入和删除操作,我们把仅仅限于在一端插入和删除操作的表叫做栈。顺序栈也就是顺序表的特殊操作,也就是栈,都没啥区别哈。二 栈的存储结构typedef原创 2021-11-01 15:36:58 · 401 阅读 · 4 评论 -
【数据结构】:B树(基本原理)
B树的概念特点性质B树又叫平衡的多路搜索树;解释:平衡的意思是又满足平衡二叉树的一些性质,左树大于右树;多路意思是,可以多个结点,不再是像二叉树只有两个结点;如12结点小于父节点18,在左子树,23 30 介于 父节点 18 33 之间,48 大于 18 33 在右子树;B树的一些特点:一个结点右多个值;父节点右多个子节点;高度一致,每个结点的子节点高度一致,平衡;B树的一些性质:m阶B树:一个结点,最多拥有m个子节点,就叫m阶B树;如:设B树的一个结点的个数为 x原创 2021-07-27 22:30:01 · 2347 阅读 · 7 评论 -
【数据结构 】八大排序(插入,希尔,选择,堆,归并,快排,冒泡,计数)
一 排序的基本概念排序啊,一个很有趣的话题,排序就是使得数据能够成为一种有序的操作。(并不严谨,可是这样理解就够了。)准确的定义,朋友们可以看看数据结构的书哈,我就不复制粘贴了哈。为什么要有排序这个概念呢,它有啥用呢?答:其实排序的主要目的就是为了提高查找效率,就比如说,二分查找算法,前提必须有有序的数据才可以使用,极大提高了查找效率。,在我的理解,我的理解上啊,其实从广义上讲:把数据结构分为四大块,线性表,非线性表,排序,查找。前面的三大板块都是为了查找做准备的,都是为了提高查找效率,怎么说呢原创 2021-07-17 15:41:48 · 6559 阅读 · 30 评论 -
【数据结构】:二叉树,线索二叉树,排序二叉树,AVL树
文章目录前言一 二叉树0)二叉树较为重要的种类1. 满二叉树2.完全二叉树1) 二叉树的存储结构2) 初始化二叉树3)创建二叉树1.创建二叉树的方式 12.创建二叉树 23.创建二叉树 34)遍历二叉树1.前序递归遍历2.中序递归遍历3.后序递归遍历4.层次遍历5)前序非递归遍历前言二叉树分好多种:我在这里分享四种二叉树的基本操作集合。普通的二叉树(二叉树)线索二叉树搜索二叉树平衡(AVL)二叉树一 二叉树0)二叉树较为重要的种类满二叉树和完全二叉树。1. 满二叉树一棵二叉树,除原创 2021-06-15 17:38:51 · 1248 阅读 · 2 评论 -
数据结构第六篇(2):线性表之顺序队列和循环队列
文章目录前言一 顺序队列1)顺序队列的存储结构2)初始化顺序队列3)顺序队列的入队4)顺序队列的出队5)获取队头元素6)顺序队列的长度二 顺序队列的问题三 循环队列前言继上一篇 数据结构第六篇(1):线性表之链式队列,继续分享顺序队列和循环队列。其实顺序队列就是基于数组的结构来实现的,较为简单,不过这是循环队列的基础要点。所以也写一篇文章。一 顺序队列1)顺序队列的存储结构既然是队列,最重要的也是头尾指针了,自然存储结构也要包含这两个指针#define SEQ_QUEUE_SIZE 8 //队列原创 2021-06-09 18:02:40 · 308 阅读 · 3 评论 -
【数据结构】:线性表之链式队列
文章目录前言一 什么是队列1. 链式队列1)链队的存储结构2)初始化链队3) 入队4)显示结果5) 出队6)获取队头元素7)求队列长度8)清除队列总结前言今天就来盘它,队列。一 什么是队列队列不难,也是线性表之中的一种,队列 队列 就是一种类似与去饭堂排队打饭的结构,先来先打到饭。队列就是元素先入队的就先出队,也就是先进先出。就很简单。1. 链式队列1)链队的存储结构结构很重要,需要记住。#define Elemtype int//链队的节点typedef struct QueueNo原创 2021-06-09 12:46:16 · 331 阅读 · 2 评论 -
【数据结构】:线性表之顺序栈
前言今天我们来看看 栈(stack) 这个玩意是什么东东。一 什么是栈栈就是一种专有名词,没什么高大上的。栈也是线性表的一种,就同顺序表,链表都是线性表一样。但既然都是顺序表,为啥,分那么多名称呢?我就打个比喻,一个公司,是不是又经理,员工等分工呀?那他们分工为了什么,不就是为了提高效率工作嘛,栈的出现也是这样,为了满足一些特殊场景而设计出来的东西,这个场景就是后进先出的场景,也就是只能在表的一端上的一个元素进行插入和删除操作,我们把仅仅限于在一端插入和删除操作的表叫做栈。顺序栈也就是顺序表的特殊操作原创 2021-06-08 22:54:53 · 212 阅读 · 6 评论 -
【数据结构】:顺序表和单链表的对比
前言这篇是对顺序表和单链表优缺点的对比。往期文章:数据结构第一篇:线性表之静态顺序表数据结构第二篇:线性表之动态顺序表(基于静态顺序表的完善)数据结构第三篇(1):线性表之单链表(不带头节点)数据结构第三篇(2):线性表之单链表(带头结点)顺序表的优缺点优点缺点可以随机访问,即可以快速获取 任意位置的元素。只要通过数组 下标既可以找到。1. 插入和删除需要移动大量元素,效率不高。**2.存储数据时候,难以分配确切的空间。**3.动态增容容易造成空间原创 2021-06-08 10:44:02 · 355 阅读 · 3 评论 -
【数据结构】:线性表之单链表(带头结点)
前言继上一篇 数据结构第三篇(1):线性表之单链表(不带头节点) 讲带头结点的链表。首先说说有头节点的好处:最直接的好处就是头插头删不应修改头指针了。空链表和非空链表能统一处理,不用单独处理空链表了。存储结构存储结构没变化#define ELemType inttypedef struct LinkNode{ ELemType date; //数据域 struct LinkNode* next; //指针域}LinkNode;typedef LinkNode* Link;原创 2021-06-07 17:59:14 · 275 阅读 · 4 评论 -
【数据结构】:线性表之单链表(不带头节点)
文章目录前言一 单链表的存储结构前言给爷冲。一 单链表的存储结构单链表最重要的就是数据域和指针域了,我们定义了一个额外的link 类型,其实就是LinkNode*类型,为了之后链表操作不用写二级指针,比较方便。当然,你不定义Link类型也可以。本质都一样。有些小伙伴不理解为什么单链表的操作要用二级指针?(c语言实现的基础上才有指针玩法)。就这么简单和你说吧,我们在单链表用的指针用法,大多数都是在形参列表时候会用到,你就简单理解,因为你需要改变单链表里面的 next指针(一级),所以要传二级指针,原创 2021-06-07 16:43:05 · 535 阅读 · 0 评论 -
【数据结构】:线性表之动态顺序表(基于静态顺序表的完善)
前言继上一篇:数据结构第一篇:线性表之静态顺序表。在该文章的结尾我们说了静态顺序表是固定大小的,今天我们来实现动态增容的顺序表。1.存储结构动态增容的顺序表和静态顺序表的没有变化。typedef int ElemType;typedef struct SeqList{ ElemType *base; int capacity; //顺序表最大容量 int size; //顺序表当前容量}SeqList;2.动态增容的代码增容成功返回1,不成功返回0,一般增加容量的大原创 2021-06-04 16:11:29 · 184 阅读 · 0 评论 -
【数据结构】线性表之静态顺序表
文章目录前言一 线性表之静态顺序表1. 顺序表的存储结构2. 静态顺序表是什么二 常用的接口实现1.顺序表初始化2.顺序表尾插3.顺序表尾删4.顺序表头插5.顺序表头删6.顺序表按下标位置插入7.顺序表按下标查找8.顺序表求其长度9.顺序表按位置删除10.顺序表按元素删除11.顺序表冒泡排序(升序)12.顺序表的反转前言一 线性表之静态顺序表1. 顺序表的存储结构提示:顺序表的存储结构较为重要,可以说学习任何的数据结构(链表,栈,队列,树,图等)只要了记得存储结构,明白里面成员代表的意思,才可以对原创 2021-06-03 23:19:27 · 1059 阅读 · 10 评论