数据结构
文章平均质量分 91
做个专栏将会持续更新有关数据结构的文章。
桀桀桀桀桀桀
专注于C/C++,后续会逐渐更新相关的文章,还会有数据结构/Linux系统等文章。
展开
-
Hash表(C++)
本篇将会开始介绍有关于 unordered_map 和 unordered_set 的底层原理,其中底层实现其实就是我们的 Hash 表,本篇将会讲解两种 Hash 表,其中一种为开放定址法,另一种为 hash 桶,在unordered_map 和 unordered_set 的底层实现中主要是使用的是 hash 桶。 本篇分别介绍了 hash 表的两种实现方法,接着讲解 hash 冲突、扩容与 hash 函数的设计原则。最后使用代码实现 hash 表的数据结构。原创 2024-07-13 16:22:50 · 726 阅读 · 0 评论 -
红黑树/红黑树迭代器封装(C++)
本篇将会较为全面的讲解有关红黑树的特点,插入操作,然后使用代码模拟实现红黑树,同时还会封装出红黑树的迭代器。 在 STL 库中的 set 和 map 都是使用红黑树封装的,在前文中我们讲解了 AVL树,对于红黑树和 AVL 树来说,这两种树都是效率很高的搜索二叉树,但是相对而言 AVL 树会更加接近平衡二叉树,但是用于封装 set 和 map 的却是红黑树,这是因为虽然红黑树不是很接近平衡二叉树,但是和 AVL 树的搜索效率相比较其实相差不是很多,相反而言,对于红黑树在插入时原创 2024-06-10 09:24:23 · 1412 阅读 · 0 评论 -
map和set
在本篇中,我们将要介绍两个常用的 STL 库中的两个数据结构,set 和 map,这两个函数的底层都是由红黑树实现的。本篇不会实现其底层原理,本篇只会将其其中的要点和使用时应该注意的地方。然后还会介绍关于 set 和 map 的两个扩展容器:multiset 和 multimap。原创 2024-06-03 09:49:58 · 1639 阅读 · 0 评论 -
二叉搜索树BST ——(C++)
本篇将会讲解有关二叉树的搜索原理,以及关于二叉搜索树的建立,以及二叉树搜索树的插入、删除和查找等基本操作。最后我们还会对二叉搜索树进行功能扩展,介绍有关搜索二叉树的 K 模型和 KV 模型。原创 2024-05-27 14:06:00 · 1259 阅读 · 0 评论 -
stack&queue类——适配器模式 && 双端队列deque(C++)
接下来我们将实现 stack、queue 类的常用函数,其实对于 stack 和 queue 的常用函数实现可以说得上是非常简单,若想详细了解可以看这篇:栈和队列&循环队列(C/C++)_栈和循环队列-CSDN博客;在本篇中我们将使用容器适配器来实现栈和队列。原创 2024-05-06 08:49:03 · 1745 阅读 · 2 评论 -
priority_queue类(仿函数实现C++)
本篇将讲解 priority_queue 的实现,叫做优先级队列,是包含在 头文件中的一种数据结构,虽然他叫做队列,但是该数据结构并不服从先进先出的特点,而是和我们的堆很相似。本篇中将多出一个仿函数的调用。原创 2024-04-29 14:11:05 · 1580 阅读 · 0 评论 -
list类——常用函数模拟
本篇将对 list 类的常用函数进行模拟。其中主要要点为函数的模拟,另外还会对函数的功能和返回值进行讲解。但 list 可以说是 string vector stack queue …… STL 库中最难实现一个类,因为 list 的迭代器不是很好实现,所以本篇一个很重要的一个点便是 list 的迭代器。不仅仅实现了 list 的迭代器,还实现了 list 中常用的函数。原创 2024-04-22 14:16:30 · 1379 阅读 · 0 评论 -
vector类——常用函数模拟(C++)
在上一篇中我们介绍了 string 类的常用函数模拟,接下来我们将开始讲解 vector 类的常用函数的讲解以及模拟实现,相较于 string 来说,vector 的函数不那么冗余,用法也没有那么多,但是在 vector 中的函数使用和模拟中,也存在很多的细节,我们将在以下一一讲解。 我们将按照迭代器、容量、获取元素、修改、默认成员函数的顺序讲解和实现函数,在实现函数的时候,详细了给出实现该函数需要注意的事项。最后谈了谈迭代器失效的情况,给出了使用迭代器的使用注意事项。原创 2024-04-17 22:22:19 · 1810 阅读 · 2 评论 -
string类——常用函数模拟(C++)
本篇中,将会详细的介绍 Cpp 中 string 的使用,以及 string 类常用函数的模拟实现。对于 string 的内置函数来说,存在很多很冗余的用法,很多函数都有很多种用法,本篇将会讲解常用内置函数的常用用法,模拟函数的时候,也只是模拟常用的用法代码。本篇实现的 string ,仅仅只是通过一种很简单的方式实现的,对于 vs 、g++ 下的 string 相比都是小巫见大巫。原创 2024-04-15 21:53:08 · 1838 阅读 · 1 评论 -
常见排序算法(C/C++)--- 动画演示
本篇将介绍一些常见的排序算法,如插入排序:直接插入排序、希尔排序;选择排序:选择排序、堆排序;交换排序:快速排序、冒泡排序;以及最后的归并排序。 对于以上的排序算法,我们总结了每种排序算法的特性,接着对直接插入排序进行了优化;然后实现了归并排序和快速排序的非递归形式;并且实现了快速排序的三种类型:Hoare、前后指针、挖坑法,以及如何优化快速排序。最后,我们还通过生成大量的随机数据,来测试每种排序算法消耗的时间。 还给出了每种算法的动画演示,便于读者理解原创 2024-03-11 15:34:48 · 3776 阅读 · 0 评论 -
二叉树(C/C++)
本篇将较为详细的介绍二叉树的相关知识,以及二叉树的实现。对于二叉树的相关知识,本篇介绍了其概念、特殊的二叉树、性质还有存储结构。接着对于实现二叉树的每个函数都有其思路讲解,主要的函数分为:遍历:前中后序遍历;结点个数:二叉树总结点个数、叶子结点个数、第k层结点个数、二叉树的高度;建立销毁二叉树:前序遍历建立二叉树与销毁二叉树;层序遍历与判断是否为完全二叉树;在二叉树中查找值为x的结点。原创 2024-02-28 20:46:50 · 1630 阅读 · 0 评论 -
堆/堆排序(C/C++)
本篇文章将会较为全面的介绍堆的概念以及实现堆两个重要算法:向上调整算法和向下调整算法。接着实现了堆排序。原创 2024-02-25 18:25:09 · 749 阅读 · 0 评论 -
栈和队列&循环队列(C/C++)
本篇将用数组实现栈、链表实现队列以及使用数组实现循环队列,然后实现了用栈实现队列和用队列实现栈以及一些其他的栈和队列的习题,加深队栈和队列的理解。若只看对应所需,可直接看文章旁的目录。原创 2024-02-14 22:58:23 · 1087 阅读 · 1 评论 -
哈夫曼树编码、译码---(c语言实现)
涉及哈夫曼树的建树,编码、译码。实现的方式为用二维数组的方式加构成哈夫曼树.原创 2023-11-07 23:03:14 · 2655 阅读 · 0 评论 -
链表/双向循环链表(C/C++)
本篇将给出双向循环链表的有关操作,以及对应的一些解释,大多都以注释给出。本篇给出的双向循环链表全程为带头双向循环链表。原创 2024-01-24 20:48:49 · 690 阅读 · 0 评论 -
单链表(C/C++)
本篇给出单链表的实现,头部插入/删除,尾部插入/删除,元素查找,指定位置前插入数据,指定位置之后插入元素,删除当前元素,删除当前元素之后的元素。以及一些其他关于单链表的知识点。原创 2024-01-21 17:38:36 · 923 阅读 · 0 评论 -
贪吃蛇/链表实现(C/C++)
本篇使用C语言实现贪吃蛇小游戏,我们将其分为了三个大部分,第一个部分游戏开始GameStart,游戏运行GameRun,以及游戏结束GameRun。对于整体游戏主要思想是基于链表实现,但若仅仅只有C语言的知识还不够,我们还需要学习控制台的一些相关操作,结合实现贪吃蛇游戏,所以我们先介绍了一些有关Win32 API的知识。原创 2024-01-28 21:20:28 · 3804 阅读 · 0 评论 -
顺序表(C/C++)
本篇将讲解一些关于顺序表的内容,顺序表分为静态顺序表和动态顺序表,其中经常用到的为动态顺序表,所以本篇将以动态顺序表为重点给出一些关于动态顺序表的操作。 因为顺序表的实现逻辑较为简单,对于代码的讲解大多以注释给出。原创 2024-01-17 15:56:49 · 525 阅读 · 0 评论