数据结构
文章平均质量分 72
Y—X
这个作者很懒,什么都没留下…
展开
-
C++数据结构——哈希表
文章目录1.unordered_map/unordered_set2. 底层结构2.1哈希概念2.2哈希函数2.3常见哈希函数2.4 哈希冲突3.闭散列(开放定址法)3.1线性探测3.2闭散列扩容-载荷因子3.3二次探测4.开散列4.1开散列增容1.unordered_map/unordered_setunordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值通常用于惟一地标识元素,原创 2021-06-13 17:58:09 · 1490 阅读 · 1 评论 -
红黑树特性和实现详解——C++进阶数据结构
1.红黑树的概念红黑树是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。2.红黑树的性质每个结点不是红色就是黑色根结点是黑色的如果一个结点是红色的,则它的两个孩子结点是黑色的对于每个结点,每条路径上都有相同数量的黑结点每个叶子结点都是黑色的(此处的叶子结点指的是空结点,上图的NIL结点)思考:为什么满足上面的性质,红黑树就能保证:原创 2021-06-05 18:17:34 · 1660 阅读 · 24 评论 -
AVLTree(二叉平衡树)底层实现
文章目录1. AVL树的概念1.1 AVL树节点的定义1.2 AVL树的插入1.3AVL树的旋转处理1.3.1右单旋1.3.2左单旋1.3.3 左右双旋1.3.4 右左双旋1.4完整代码实现及验证1. AVL树的概念如果二叉搜索树的插入序列是有序的或者是接近有序,那么二叉搜索树就会退化为单支树(类似单链表),查找元素相当于在顺序表中搜索元素,时间复杂度为O(N)。AVLtree(Adelson Velskii Landis tree)是一个加上额外平衡条件的二叉搜索树,左右子树高度之差(简称平衡因子)原创 2021-05-31 17:23:00 · 321 阅读 · 1 评论 -
C++____二叉搜索树
1. 二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树int a [] = {5,3,4,1,7,8,2,6,0,9};template <class K>struct BSTreeNode{ K _key; BSTreeNode<K>* _left; BSTreeNode原创 2021-05-23 15:45:25 · 156 阅读 · 1 评论 -
二叉树的前中后序非递归法
题目集合:144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历前序遍历:思路:前序非递归遍历需要借助栈如果树为空,直接返回如果树非空:从根节点位置开始遍历,因为前序遍历规则:根节点、左子树、右子树a. 沿着根节点一直往左走,将所经过路径中的节点依次入栈,并访问。b. 取栈顶元素,该元素取到后,其左子树要么为空,要么已经遍历,可以直接遍历该节点,对于该节点,其左子树已经遍历,该节点也已经遍历,剩余其右子树没有遍历,将其左子树当成一棵新的树开始遍历,继续a/**原创 2021-05-17 21:28:56 · 127 阅读 · 6 评论 -
数据结构——排序
目录1.排序的概念2.常见的排序算法的实现:2.1直接插入排序:2.2希尔排序:2.3 选择排序2.4堆排序2.5 冒泡排序2.6快速排序2.6.1 hoare版本2.6.2 挖坑法2.6.3 前后指针版本2.7 归并排序2.8 计数排序3.排序算法复杂度及稳定性分析3.1稳定性:1.排序的概念所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动原创 2021-01-30 16:44:08 · 423 阅读 · 0 评论 -
数据结构——二叉树的实现
目录1.二叉树的的链式结构2.通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树3.二叉树的销毁4.二叉树的结点个数和叶子结点的个数5.二叉树第k层节点个数6.二叉树查找值为x的节点7.先中后序遍历二叉树7.1二叉树的前序遍历7.2二叉树的中序遍历7.3 二叉树的后序遍历8.层序遍历9. 判断二叉树是否是完全二叉树1.二叉树的的链式结构typedef char BTDataType;typedef struct BinaryTreeNode{ BTDataType _data;原创 2021-01-22 16:39:20 · 545 阅读 · 0 评论 -
数据结构——堆
堆1.堆的概念2.堆的实现2.1堆的向下调整算法2.2堆的构建2.2.1构造最小堆2.2.2时间复杂度分析:2.3堆的插入2.4 堆的删除,取堆顶元素,取堆的数据个数,堆的判空3.堆排序3.1 (小堆)降序1.堆的概念1、堆是一颗完全二叉树(适合使用顺序结构存储);2、堆中的某个结点的值总是大于等于(最大堆)或小于等于(最小堆)其孩子结点的值。3、堆中每个结点的子树都是堆树。2.堆的实现2.1堆的向下调整算法我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以原创 2021-01-16 20:18:18 · 1334 阅读 · 2 评论 -
数据结构——栈(Stack)和队列(Queue)
文章目录栈和队列1.栈的定义1.1栈的顺序存储结构1.2基于动态数组实现的顺序栈2.队列的定义2.1队列的链式存储结构2.2基于单链表实现的链队列栈和队列1.栈的定义栈(stack)是限定仅在表尾进行插入和删除操作的线性表。我们把允许数据插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表。1.1栈的顺序存储结构栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组原创 2021-01-07 23:29:40 · 511 阅读 · 4 评论 -
经典面试题之顺序表和链表的优缺点
1.什么是顺序表?顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改,并且插入时可以动态增长。2、什么是链表?链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。每个结点的构成:数据域 + 指针域(结构体指针)。实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:单向、双向带头、不带头循环、非循环①顺序表的优缺点:优点:(1).空间连续。(2).缓存利原创 2021-01-01 14:55:03 · 834 阅读 · 1 评论