![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 80
暂停更新
暂停更新。
展开
-
哈希表(底层结构剖析--下)
方法一调用了Insert函数这样虽然可以解决创建新的哈希表导致每个数据的位置打乱,导致要重新计算插入位置的问题.可是,通过insert复用的办法,是生成了新的结点插入,函数栈帧结束后,旧表的数据结点通过调用析构函数销毁,可是,这样就会造成老的结点没有被充分运用的问题.一般来讲,因为内存限制,我们不太可能需要一个最大素数大小的哈希表,但是有可能我们传的值会比最大素数还大.但是,从语法上考虑,当这种情况发生,我们应该也要返回一个值,这里返回素数数组中最大素数.原创 2023-04-24 14:42:38 · 578 阅读 · 15 评论 -
哈希表(底层结构剖析-- 上)
1: 在顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系.因此,在查找一个元素时,必须要经过关键码的多次比较.我们知道顺序表查找的时间复杂度为0(N),平衡树中的查找的时间复杂度则为树的高度,即O(log2N),此时,搜索的效率取决于搜索过程中元素的比较次数.在以下数据集合中,11,21,31与1发生哈希冲突,只能在1的后续空位置中插入元素,但是11占用了2的位置,又导致11与2之间发生哈希冲突,而2又是占用了其他元素的位置,有可能引发别的元素之间的哈希冲突.原创 2023-04-23 12:08:02 · 911 阅读 · 27 评论 -
红黑树(C++实现)
我们实现的是KV模型结构的红黑树,由于红黑树需要旋转,我们将红黑树的结点定义为三叉链结构,并且添加一个新成员_col,代表结点的颜色,方便后续的变色平衡.template < class K , class V > struct RBTreeNode //三叉链 {//存储的键值对 Colour _col;原创 2023-04-17 15:21:54 · 794 阅读 · 12 评论 -
AVL树(C++实现)
我们实现的是KV模型的AVL树,为了方便后续的操作,这里AVL树结点定义为三叉链结构,并且引入平衡因子,方便判断每棵树的平衡情况,并且还需要一个初始化列表将结点成员全部初始化.//三叉链 AVLTreeNode < K , V > * _left;//存储键值对 int _bf;原创 2023-04-14 20:54:44 · 1141 阅读 · 13 评论 -
二叉搜索树(二叉树进阶)
如果min在minParent的右边,及删除结点右子树的最左结点为空的情况下,此时min就是右子树的最左结点,如果minParent初始化为nullptr,则无法进入循环寻找右子树的最左节点,所以可以将minParent初始化为cur.然后将minParent的右指针指向min的右孩子后将cur与min的值替换删除.(a):寻找右子树的最左结点.用cur记录要删除结点,根据右子树的最左结点必为空的特性下不断向左循环查找,并且我们要记录右子树最左节点的父节点,便于父节点链接最左节点的孩子结点.。原创 2023-03-30 17:53:50 · 434 阅读 · 6 评论 -
数据结构树的概念和堆
目录:一:树的基本概念1:树的基本结构2:二叉树的基本性质二:堆1:堆的两种结构2: 向上调整和向下调整3:堆的插入和删除4:两种建堆方式5:堆的排序;5:向上调整,向下调整,两种建堆方式的时间复杂度三:个人总结一:树的基本概念(1)树的基本结构1:节点的度:一个节点含有的子树的个数称为度。 2:树的高度或者深度:树中结点的最大层次。(做题时一般默认第一层为1开始计算)。3:节点的祖先:从根到该点所经分支上的所以结点。(2)二叉树的基本概念和性质1:完全二叉树:完全二叉树由满二叉树引出来,它的每一个结点编号原创 2022-06-06 22:47:17 · 162 阅读 · 1 评论 -
数据结构之时间复杂度和空间复杂度
一:大O的渐进表示法;1:在修改后的运行次数函数中,只保留最高项;时间复杂度算的是次数;2:在实际中一般情况下关注的是算法的最坏的情况;3:在计算冒泡排序的时间复杂度时:有N个数,第一个数要比较N-1次,第二个数要比较N-2次....所以数学表达式为:F(N) = N-1+N-2+N-3+.....+1;所以时间复杂度为O(N^2);这道题通过数学方法,列出每一项要比较的次数,然后用公式算出总的次数;4:在二分查找的时间复杂度时先看他最差的情况就.原创 2022-05-09 15:47:29 · 389 阅读 · 0 评论 -
数据结构之链表
以下便是链表的基本结构啦~由数据域和指向这个结点的指针构成;为了更方便的使用,我们可以将它进行重命名为SLTNode。接下来我们便可以创建一个新的结点;通过返回新节点的地址来使使用时更好的连接;以下便是对SListpushBack,SListpushFront,SListNodeinsert,SListInsert 的代码~1:插入如果如果要改变头指针,一般要用二级指针去接收;2:插入一般要考虑空链表的情况,插入的位置也要防止传入错误,如NULL;...原创 2022-05-04 17:31:40 · 531 阅读 · 0 评论 -
数据结构之双向循环链表
第一步:添加新的结点;第二步:进行初始化头节点head;第三步:ListPunshBack尾插,ListPopBack尾删;11:双向链表的最大优点便是可以不用遍历,就能随时找到尾指针了。2:而且尾删的话因该先保存他们俩之间的关系再删;3:尾删应该考虑空链表的请开给你,用关系表达式断言,当head的next值不不等于头节点为真时,才考虑执行下面的语句;第四步:带头双向链表任意位置的插入ListInsert与删除ListErase:第五步:带头双向循环链..原创 2022-05-15 11:23:38 · 247 阅读 · 0 评论 -
数据结构之栈与队列
目录:一:1:线性表的关系2:线性表的关系3:栈的基本组成2:栈的分步操作二:1:队列的基本组成2:队列的分布操作三:队列与栈的总结1:线性表的关系:线性表一般包括链表和顺序表,即顺序储存结构和链式储存结构。2:栈的基本组成为什么适合采用顺序表作为链表?1:栈的操作一般只在栈顶插入与删除相当于顺序表的尾插尾删,而顺序表对于尾插尾删十分方便,时间复杂度为 O(1)。3:栈的分布操作及对应代码栈的初始化:在尝试写栈的初始化中,我们很容易将ps->a写成STDataType a;这将会导致扩容时指针a发生异常;原创 2022-05-22 22:41:23 · 174 阅读 · 0 评论 -
八大排序算法
八大排序算法原创 2022-07-23 22:51:44 · 281 阅读 · 0 评论 -
二叉树进阶复习1
二叉树基本操作及其感悟。原创 2022-08-04 16:03:37 · 129 阅读 · 0 评论