![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 95
数据结构笔记
Man9Oo
做想做的事,成为想成为的人 [shawyxy.github.io](网站第一时间更新,正在建设中...)
展开
-
用同一个哈希表实现unordered_map和unordered_set(C++实现)【STL】
同一个哈希表实现unordered_set和unordered_map,就需要控制底层的哈希表的模板参数。由于原先实现哈希表时默认是以作为键值对的,而哈希表在底层是不知道上层是unordered_set还是unordered_map,所以为了区分两者键值对的第二个模板参数,将哈希表中的第二个模板参数从V改成T当上层是unordered_set时,T和K相同;当上层是unordered_map时,T就是value。原创 2022-12-10 15:25:29 · 475 阅读 · 0 评论 -
哈希表、哈希桶(C++实现)【STL】
哈希(hash,中文:散列;音译:哈希),是一种算法思想,又称散列算法、哈希函数、散列函数等。哈希函数能指导任何一种数据,构造出一种储存结构,这种储存结构能够通过某种函数使得元素的储存位置和数据本身的值(一般称之为key值)能够建立一种映射关系,这样在查找数据时就可以通过同一个哈希函数通过key值迅速找到元素的位置。这种查找思想类似于数组的随机访问,它的时间复杂度为O(1)O(1)O(1)。不同于以往,即便是红黑树,它的查找时间复杂度也是O(log2N))O(log_2N))O(log2N))。原因是不论原创 2022-12-05 17:46:17 · 1876 阅读 · 0 评论 -
红黑树的插入(C++实现)
和实现AVL树结点类类似,依然使用pair键值对作为结点值的部分。必要时,红黑树依然要进行旋转,所以和AVL一样,也要定义一个parent变量,用于存放结点的父结点的地址。除此之外,红黑树新增了一个_col变量,用于表示结点的颜色。在此,使用枚举常量保存颜色。enum Color // 使用枚举 {// 红黑树结点类 template < class K , class V > struct RBTreeNode {// 颜色 pair < K , V > _kv;原创 2022-11-20 17:05:30 · 705 阅读 · 1 评论 -
AVL树的插入(C++实现)
AVL树是改良以后的二叉搜索树,由于它有着平衡因子的限制,所以将AVL树的结点用三叉链表示,其中新增的是根结点的父结点的指针,以便稍后进行旋转后的链接操作。除此之外,也需要为每个结点增加一个新的属性:平衡因子。这里使用了pair,它是储存一个键值对(key和value)的单位,分别用模板参数K和V表示。其中,构造函数分别把指针默认设置为nullptr,平衡因子默认设置为0,由于模板参数在传入时就必须指定类型,所以使用传入的模板参数组合构造pair。原创 2022-11-16 13:14:39 · 873 阅读 · 0 评论 -
非递归遍历二叉树
二叉树用递归实现前中后序遍历虽然思路简单,但是由于OS分配给一个进程的栈空间很小,一般是8MB,在VS中,即便是release版本下,效率差别也不是很大。所以递归转非递归的原因不在于效率,而是递归有栈溢出的风险。而进程被分配的堆空间大小能有几个G,所以在堆上模拟递归的过程能让递归的“层数”更深。通常使用循环和栈模拟递归,例如斐波那契数列可以用循环模拟递归,快排可以用栈模拟。非递归模拟递归,最重要的是模拟递归的过程。原创 2022-11-08 15:44:53 · 466 阅读 · 0 评论 -
二叉搜索树
根据二叉搜索树的定义,用二叉链表示结点的左右子树,用_key表示结点储存的值。除此之外,在类中定义一个结点的构造函数,以便new出来干净的结点是干净的。将模板参数设置为K,意为key。// 定义结点类 template < class K > struct BSTreeNode {K _key;// 值 BSTreeNode * _left;// 左孩子结点 BSTreeNode * _right;原创 2022-11-08 13:43:02 · 317 阅读 · 0 评论 -
八大排序【数据结构/初阶/C语言实现】
本文内容:选择排序,插入排序,希尔排序,冒泡排序,堆排序,三种快速排序,归并排序计数排序排序是数据结构的重要组成部分,也是校招考试的重点,学习排序不仅要理解每个排序的过程,还要自己动手写,重复练习和复习,加深理解....原创 2022-07-14 22:23:34 · 540 阅读 · 0 评论 -
二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】
二叉树前中后序遍历(深度优先遍历),层序遍历(广度优先遍历),二叉树深度,比较二叉树的三种题型,自己实现二叉树原创 2022-06-28 20:08:49 · 1567 阅读 · 0 评论 -
二叉树的概念和性质/向上调整、向下调整算法/堆的插入和删除/堆排序/Top-K问题【上】【数据结构/二叉树/初阶/C语言实现】
二叉树是非常重要的,是成为优秀程序员必须深入理解且熟练运用的一种数据结构.原创 2022-06-11 19:51:38 · 289 阅读 · 1 评论 -
函数栈帧的创建与销毁
了解函数栈帧的创建与销毁能更深层地理解函数调用之间的关系,对底层的了解程度是衡量程序员功力的标准之一原创 2022-05-17 14:30:31 · 1423 阅读 · 8 评论 -
栈和队列刷题 Leetcode.225/232/20【C语言实现】
栈和队列刷题 【C语言实现】leetcode.232 用栈实现队列leetcode.225 用队列实现栈leetcode.20 有效的括号原创 2022-04-23 14:57:17 · 1353 阅读 · 1 评论 -
C语言实现栈和队列【数据结构/初阶】
C语言实现栈和队列原创 2022-04-22 19:41:48 · 2545 阅读 · 7 评论 -
带环链表 复杂链表 刷题+心得【C语言实现 】
带环链表 复杂链表 心得原创 2022-04-18 13:53:24 · 1274 阅读 · 8 评论 -
顺序表 链表刷题【C语言实现】
C语言 顺序表、单向链表刷题原创 2022-04-15 18:37:25 · 964 阅读 · 12 评论 -
C语言实现对顺序表和链表的增删改【数据结构/初阶】
顺序表和链表是数据结构中最基础的部分,我们将学习对它们的增删查改,这是也是许多OJ题的基础原创 2022-04-12 23:11:41 · 2097 阅读 · 8 评论