![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 93
KronosCzj
这个作者很懒,什么都没留下…
展开
-
数据结构与算法详解——字符串匹配算法篇(附c++实现代码)
目录BF算法RK算法KMP算法BM算法 字符串匹配就是在主串A中查找模式串B,例如在主串abababc中查找模式串abc是否存在,记主串A的长度为n,模式串B的长度为m,n>=m。BF算法 BF(Brute Force)算法,又叫暴力匹配算法或者朴素匹配算法,思路很简单:在主串中取前下标为[0,m-1]这m个字符的子串和模式串逐个字符逐个字符比较,如果完全一样就结束并返回下标;如果有不一样的,那么主串中的子串后移一位,主串中[1,m]这个子串和模式串继续比较,… ,主串中[n-m,n-1]原创 2022-06-01 11:12:38 · 1546 阅读 · 0 评论 -
数据结构与算法详解——堆篇(附c++实现代码)
堆,堆排序,topK问题,求中位数原创 2022-05-27 10:13:42 · 678 阅读 · 0 评论 -
数据结构与算法详解——二分查找篇(附c++实现代码)
目录经典的二分查找有重复值的二分查找变体左侧边界的二分查找右侧边界的二分查找寻找最后一个小于等于value的位置寻找第一个大于等于value的位置经典的二分查找 二分查找是一种经典的查找算法,只适用在有序的数据上,时间复杂度为O(logn),可以说是相当高效的查找算法了。 这里就直接贴代码了:template<typename T>int bsearch(T arr[], int size, T value) { int left = 0, right = size - 1;原创 2022-05-25 11:05:10 · 1345 阅读 · 0 评论 -
数据结构与算法详解——排序篇(附c++实现代码)
目录如何分析评价一个排序算法?时间复杂度为O(n^2)的排序冒泡排序插入排序选择排序时间复杂度为O(nlogn)的排序归并排序快速排序时间复杂度为O(n)的排序桶排序计数排序基数排序如何分析评价一个排序算法?最好、最坏情况和平均时间复杂度空间复杂度,这里有一个专有名词原地排序,指的是空间复杂度为O(1)的排序排序的稳定性 这里需要详细讲一下第三点,排序的稳定性:假设现在我们有一组数据{4,3,1,2,1}需要排序,排序后为{1,1,2,3,4},如果排序前后两个1的前后顺序没有改变,那么就说原创 2022-05-25 10:20:10 · 259 阅读 · 0 评论 -
数据结构与算法详解——二叉查找树篇(附c++实现代码)
目录二叉树相关概念和术语二叉树特殊类型二叉树的存储链式存储顺序存储二叉树的遍历二叉查找树查找插入删除完整代码二叉树相关概念和术语 二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。度:一个节点拥有子树的数目称为结点的度,叶子结点的度为0。叶子结点:也称为终端结点,没有子树的结点或者度为零的结点。结点的层次:从根结点开始,假设根结点为第1层,根节点的子结点为第2层,依此类推,如果某一个结点位于第L原创 2022-05-23 13:09:14 · 1353 阅读 · 0 评论 -
数据结构与算法详解——跳表篇(附c++实现代码)
目录跳表时间复杂度分析跳表 前面我们说到链表,链表的查找的时间复杂度是O(n),比较慢,插入和删除操作是O(1),但是实际上插入和删除都需要先遍历查找到插入和删除的位置。跳表就是在有序链表的基础上添加索引,使得有序链表的查找效率提高。 假设现在有一个16个结点的有序链表,存储1-16整型数字,现在我们需要查找值为12这个结点需要遍历12个结点。 现在我们为链表建立一层索引,假设每两个结点就建立一个索引: 现在我们查找值为12的结点,先从第一级索引中查找,找到结点11,结点11的下一个结原创 2022-05-16 16:04:23 · 687 阅读 · 0 评论 -
数据结构与算法详解——散列表篇(附c++实现代码)
目录散列表散列函数哈希冲突开放地址法线性探测二次探测双重散列链表法装载因子散列表 前面数组、链表、栈、队列都是序列式容器,存储的都是一个元素。而散列表又叫哈希表(hash table),是一种关联式容器,存储的是一对值,一般是一个key对应一个value(又叫键值对)。 c++ stl中的map就是一个散列表,举个例子:std::map<std::string,int> m;m["小明"]=170;std::cout<<"小明的身高是"<<m["小明"]&原创 2022-05-13 15:24:06 · 1875 阅读 · 1 评论 -
数据结构与算法详解——队列篇(附c++实现代码)
目录队列的概念队列的实现队列的概念 队列的概念比较好理解,和我们现实中的排队比较相似,先进先出。栈和队列有点相似,栈有入栈出栈两种基本操作,队列相对应也有入队出队两种基本操作,不过栈只能从栈顶入,从栈顶出;而队列从队尾入,从队头出,所以队列也是一种操作受限的线性表。队列的实现 和栈一样,用数组实现的队列叫顺序队列,用链表实现的队列叫链式队列。 前面说了,队列从队尾入,从队头出,因此我们需要维护队头head和队尾tail,顺序队列的入队和出队的代码大致是:template<typena原创 2022-05-12 16:02:09 · 553 阅读 · 0 评论 -
数据结构与算法详解——栈篇(附c++实现代码)
目录栈的概念栈的实现完整代码栈的应用括号匹配表达式求值栈的概念 栈又叫堆栈,是一种运算受限的线性表,只能在表尾进行插入或者删除,表尾这一断也称为栈顶,另一端称为栈底,插入一般称为入栈或者压栈,删除一般称为出栈。栈的特性就是“先进先出”,例如我把1,2先后压栈,出栈的时候必须先弹出2,才能弹出1。 注意:堆栈就是栈,而不是指堆和栈两种数据结构,还有,操作系统内存中的堆栈和数据结构中的堆栈是两回事。栈的实现 栈可以用数组或者链表实现,用数组实现的称为顺序栈,用链表实现的称为链式栈,这里我实现的是原创 2022-05-12 10:49:44 · 1115 阅读 · 0 评论 -
数据结构与算法详解——链表篇(附c++实现代码)
链表详解及完整实现原创 2022-05-01 18:34:56 · 3117 阅读 · 0 评论