![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 64
Hidden.Blueee
这个作者很懒,什么都没留下…
展开
-
unordered_map和unordered_set的模拟实现
定义哈希表(Hash table,也叫散列表),是根据关键字值(key,value)直接进行访问的数据结构。也就是说,它通过把关键字映射到表中一个位置来访问的纪录,以加快查找的速度。这个映射函数叫做散列函数,存放纪录的数组叫散列表。基本原理使用一个下标范围比较大的数组来存储元素。可以设计一个函数(哈希函数,也叫做散列函数),使得每个元素的关键字都与一个函数值(即数组下标,hash值)相对应,于是用这个数组单元来存储这个元素。哈希冲突通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致经过哈原创 2021-05-28 14:15:26 · 131 阅读 · 0 评论 -
红黑树模拟实现
#include <iostream>#include <utility>using namespace std;enum Color{ RED, BLACK};template<class V>struct RBNode{ RBNode<V>* _left; RBNode<V>* _right; RBNode<V>* _parent; Color _color; V _val; RBNode(const原创 2021-05-21 14:39:09 · 172 阅读 · 0 评论 -
AVL树四种旋转详解
平衡二叉树平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡因子某结点的左子树与右子树的高度(深度)差即为该结点的平衡因子(Balance Factor)。平衡二叉树上所有结点的平衡因子只可能是 -1,0 或 1。四种旋转情况往平衡二叉树中添加节点很可能会导致二叉树失去平衡,所以我们需要在每次插入节点后进行平衡的原创 2021-05-16 11:13:08 · 1205 阅读 · 0 评论 -
数据结构之队列
队列只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头队列的实现队列可以数组和链表的结构实现,使用链表的结构实现更优一些。因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。定义typedef int QueueDataType;//队列中的单链表的节点typedef struct QueueNode{ struct Que原创 2021-03-05 11:44:40 · 77 阅读 · 0 评论 -
数据结构之堆
目录一、堆1. 概念2. 性质3. 结构二、堆的实现1. 算法实现:(1)向下调整算法(2)向上调整算法(堆的创建)(3)堆的插入(4)堆的删除(5)堆的排序2. 代码实现(小堆):(1)堆的定义(2)交换(3)检查容量(4)向下调整(5)向上调整(6)堆的初始化(7)堆的创建(8)销毁堆(9)堆的插入(10)堆的删除(11)获取堆顶元素(12)判空(13)堆排序(14)打印堆一、堆1. 概念如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式原创 2021-03-05 11:44:23 · 37595 阅读 · 18 评论 -
数据结构之二叉树
树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、…、Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继因此,树是递归定义的。节点的度:一个节点含有的子树的个数称为该节点的度;原创 2021-03-05 11:44:07 · 294 阅读 · 1 评论 -
数据结构之排序
插入排序直接插入排序希尔排序选择排序选择排序堆排序交换排序冒泡排序快速排序归并排序归并排序原创 2021-02-28 14:52:59 · 122 阅读 · 0 评论 -
数据结构之栈
一、栈 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈、压栈、入栈,入栈数据在栈顶。出栈:栈的删除操作叫做出栈。出栈数据也在栈顶。二、栈的实现栈的实现一般可以使用数组或者链表实现。相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。(1)定义typedef int SeqStackType;原创 2021-01-31 17:27:28 · 130 阅读 · 0 评论 -
数据结构之链表
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。实际中链表的结构非常多样以下情况组合起来就有8种链表结构:单向、双向带头、不带头循环、非循环实际上最常用还是两种结构:无头单向非循环链表,带头双向循环链表。无头单向非循环链表结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构。定义typedef int SLTDataType;typedef struct SListNode{ SLTDataType d原创 2021-01-25 15:58:25 · 107 阅读 · 0 评论 -
数据结构之顺序表
顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。静态顺序表静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以很少使用。#define N 1024#include <stdio.h>typedef int SLDataType;typedef str原创 2021-01-25 15:52:31 · 88 阅读 · 0 评论