![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构(初阶)
文章平均质量分 84
ymz123_
C/C++
展开
-
C++实现跳表
跳表原创 2022-09-12 21:58:33 · 1018 阅读 · 2 评论 -
C++实现并查集
并查集原创 2022-09-12 20:04:15 · 597 阅读 · 0 评论 -
哈希(C++)
文章目录unordered系列关联式容器unordered_mapunordered_set底层结构哈希概念哈希冲突哈希函数(常见)哈希冲突解决闭散列开散列(哈希桶)unordered系列关联式容器在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的原创 2022-03-07 21:49:27 · 839 阅读 · 23 评论 -
红黑树(C++)
文章目录红黑树红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入操作情况一情况二情况三红黑树的验证用红黑树封装map、set红黑树的迭代器封装map封装set红黑树红黑树的概念红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O(),红黑树不追求绝对平衡,原创 2022-02-27 23:33:59 · 3815 阅读 · 34 评论 -
set、map及AVL树
文章目录关联式容器树型结构的关联式容器键值对setmapinsertoperator[]multisetmultimap前K个高频单词AVL树概念节点的定义插入旋转右单旋左单旋左右双旋右左双旋AVL树的验证关联式容器序列式容器如vector、list、deque、forward_list(C++11)等,其底层为线性序列的数据结构,里面存储的是元素本身。关联式容器:里面存储的是<key, value>结构的键值对,再数据检索时比序列式容器效率更高。树型结构的关联式容器根据应用场景的不原创 2022-02-23 23:45:40 · 710 阅读 · 13 评论 -
二叉搜索树(C++)
文章目录二叉搜索树概念与操作二叉搜索树的概念二叉搜索树的操作查找插入删除二叉搜索树的应用二叉树的性能分析二叉搜索树概念与操作二叉搜索树的概念二叉搜索树又称二叉排序树,若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它的右子树不为空,则右子树上所有节点的值都大于根节点的值,它的左右子树也分别未二叉搜索树。也可以是一颗空树。int a[] = { 5, 3, 4, 1, 7, 8, 2, 6, 0, 9 };二叉搜索树的操作查找迭代: Node* Find(const K&am原创 2022-01-27 20:57:20 · 2537 阅读 · 22 评论 -
二叉树相关练习(1)
文章目录重建二叉树判断树的子结构二叉树的镜像二叉树的层序遍历二叉树的后序遍历序列二叉树中和为某一值的路径二叉树深度的判定按之字型打印二叉树二叉搜索树中第k小的元素重建二叉树题目描述:给定节点数为 n 二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。解题思路:根据root节点,将中序vector划分成vin_left,vin_right两部分中序子序列原创 2021-12-26 00:47:50 · 413 阅读 · 0 评论 -
八大排序算法
文章目录直接插入排序希尔排序选择排序堆排序冒泡排序快速排序1. hoare版本2. 挖坑法3.前后指针法非递归快速排序归并排序递归实现非递归实现计数排序稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。直接插入排序直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值原创 2021-11-03 22:11:44 · 908 阅读 · 1 评论 -
二叉树链式结构的实现
文章目录二叉树的遍历前序遍历中序遍历:后序遍历节点个数及高度等求二叉树节点个数求二叉树叶子节点个数求二叉树第k层节点个数求二叉树深度/高度查找值为x的节点二叉树基础oj练习单值二叉树二叉树的前序遍历二叉树的遍历为了先了解二叉树的结构,此处先手动快速创建一棵简单的二叉树:typedef char BTDataType;typedef struct BinaryTreeNode{ BTDataType _data; struct BinaryTreeNode* _left; struct Bi原创 2021-10-30 23:18:52 · 726 阅读 · 2 评论 -
二叉树-堆(2)
文章目录向上调整建堆堆的代码实现Heap.hHeap.c初始化堆销毁堆插入数据删除数据获取堆顶数据判断堆是否为空获取堆中数据个数打印堆中数据test.cTOP-K问题向上调整建堆我们知道对一个数组建堆,有向下调整算法来建堆,但向上调整同样可以建堆。首先可以把数组中的第一个数据看成一个堆,第二个数据相当于插入第一个数据后面,再向上调整成一个堆。向上调整算法与向下调整类似:void AdjustUp(int* a, int child){ int parent = (child - 1) / 2;原创 2021-10-30 15:49:15 · 82 阅读 · 0 评论 -
二叉树-堆排序
文章目录二叉树的概念概念特殊二叉树二叉树的性质二叉树的顺序结构及实现二叉树的顺序结构堆的概念及结构堆的实现堆向下调整算法堆的创建堆排序建堆的时间复杂度二叉树的概念概念概念:一棵二叉树是结点的一个有限集合,该集合:1.或者为空2.由一个根节点加上两棵分别称为左子树和右子树的二叉树组成。二叉树不存在度大于2的结点二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。特殊二叉树1.满二叉树: 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一原创 2021-10-29 23:49:01 · 374 阅读 · 2 评论 -
队列的介绍与实现
文章目录队列的概念及结构队列的实现Queue.hQueue.c队列初始化队列的销毁入队出队获取队列数据个数获取队列头的数据获取队尾数据判断队列是否为空test.c循环队列用队列实现栈队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列遵循先进先出。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为对头。队列的实现队列可以用数组和链表的结构实现,但使用链表的结构更优一些,入队时在单链表尾部插入,出队时在单链表头部删除,比较方便。双链表原创 2021-10-29 17:45:52 · 99 阅读 · 0 评论 -
栈的介绍与实现
文章目录栈的概念及结构栈的实现Stack.hStack.c栈的初始化栈的销毁入栈出栈判断栈是否为空获取数据个数获取栈顶元素test.c典型例题栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一段进行插入和删除元素操作。进行数据插入和删除操作的一端成为栈顶,另一端称为栈底。 栈中元素遵守后进先出原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作。出数据也在栈顶。栈的实现栈的实现一般可以使用数组或链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代原创 2021-10-29 17:03:49 · 131 阅读 · 0 评论 -
双向链表详解
文章目录链表的分类双向链表的实现List.h初始化链表打印链表创建新结点尾插尾删头插头删查找数据在pos结点前插入数据删除pos结点链表的销毁test.c链表的分类实际中链表的结构非常多样,但我们实际中最常用的还是两种结构:1.无头单向非循环链表2.带头双向循环链表1.无头单向非循环链表:结构简单,一般不会单独用来存储数据,实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。2.带头双向链表:结构复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。代码实原创 2021-10-27 23:13:09 · 121 阅读 · 0 评论 -
环形链表问题
问题描述:给定一个链表,判断链表中是否有环。首先介绍一下快慢指针:我们定义两个指针,一快一慢。慢指针每次只移动一步,而快指针每次移动两步。来看以下例子:在环形链表问题中,我们用slow和fast指向链表的开始,slow一次走一步,fast一次走两步。若不带环,fast就会为空,带环,fast就会在环内追上slow1.我们先来证明为什么slow和fast一定会在环中相遇。fast先进环,这时slow走了入环前距离的一半。随着slow进环,fast在环内走了一段,但走了多少跟环的大小有关。原创 2021-10-24 22:03:39 · 2998 阅读 · 3 评论 -
单链表的增删查改
链表的概念及结构概念: 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。顺序表优点: 支持随机访问。(用下标直接访问第i个元素) 有些算法,需要结构支持随机访问。比如:二分查找,优化的快排等等。顺序表缺陷:空间不够了需要增容,增容是有代价的。避免频繁扩容,一般都是依次是扩容2倍,可能就会导致一定的空间浪费。顺序表要求数据从开始位置连续存储,那么我们在头部或者中间位置插入删除数据就需要挪动数据,效率不高。针对顺序表缺陷,就设计出的链原创 2021-10-23 10:10:58 · 117 阅读 · 0 评论 -
顺序表详解
**顺序表:** 顺序表是用一段**物理地址连续**的存储单元一次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。但是在数组的基础上,它还要求**数据是从头开始连续存储的,不能跳跃间隔。**原创 2021-10-22 00:14:23 · 147 阅读 · 0 评论 -
数据结构-复杂度
文章目录1.时间复杂度概念大O的渐进表示法常见时间复杂度计算举例2.空间复杂度举例计算:3.复杂度的oj练习1.时间复杂度概念时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间原创 2021-10-20 23:08:16 · 205 阅读 · 4 评论