数据结构与算法
文章平均质量分 52
千北@
Knowledge has no limit limit
展开
-
【字符串基础】
【字符串基础】转载 2023-09-21 17:26:17 · 236 阅读 · 0 评论 -
【看一遍就理解:动态规划详解】
我们刷leetcode的时候,经常会遇到动态规划类型题目。动态规划问题非常非常经典,也很有技巧性,一般大厂都非常喜欢问。今天跟大家一起来学习动态规划的套路,文章如果有不正确的地方,欢迎大家指出哈,感谢感谢~公众号:捡田螺的小男孩动态规划(英语:Dynamic programming,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。以上定义来自维基百科,看定义感觉还是转载 2022-06-03 21:28:43 · 113 阅读 · 0 评论 -
【算法基础总结】
算法基本知识铺垫什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下:1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序。4、非原地排序:需要利用额外的数组来辅助排序。5、时间复杂度:一个原创 2022-01-21 12:50:41 · 396 阅读 · 0 评论 -
【十大经典排序详解_快速排序】
快速排序 不太好记住算法思想1、选取第一个数为基准2、将比基准小的数交换到前面,比基准大的数交换到后面3、对左右区间重复第二步,直到各区间只有一个数我们从数组中选择一个元素,我们把这个元素称之为中轴元素吧,然后把数组中所有小于中轴元素的元素放在其左边,所有大于或等于中轴元素的元素放在其右边,显然,此时中轴元素所处的位置的是有序的。也就是说,我们无需再移动中轴元素的位置。从中轴元素那里开始把大的数组切割成两个小的数组(两个数组都不包含中轴元素),接着我们通过递归的方式,让中轴元素左边的数组和右边的原创 2022-01-19 15:05:22 · 863 阅读 · 0 评论 -
【十大经典排序详解_冒泡排序】
冒泡排序冒泡排序就是把小的元素往前调或者把大的元素往后调,比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复原创 2022-01-18 17:25:34 · 139 阅读 · 0 评论 -
【十大经典排序详解_插入排序】
插入排序插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开 始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相 等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。从第一个元素开始,该元素可以认为已经被排序取出下原创 2022-01-18 22:20:48 · 113 阅读 · 0 评论 -
【十大经典排序详解_归并排序】
归并排序将一个大的无序数组有序,我们可以把大的数组分成两个,然后对这两个数组分别进行排序,之后在把这两个数组合并成一个有序的数组。由于两个小的数组都是有序的,所以在合并的时候是很快的。通过递归的方式将大的数组一直分割,直到数组的大小为 1,此时只有一个元素,那么该数组就是有序的了,之后再把两个数组大小为1的合并成一个大小为2的,再把两个大小为2的合并成4的 … 直到全部小的数组合并起来。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非原创 2022-01-20 20:15:05 · 834 阅读 · 0 评论 -
【十大经典排序详解_基数排序】
基数排序一种多关键字的排序算法,可用桶排序实现。算法思想:取得数组中的最大数,并取得位数;arr为原始数组,从最低位开始取每个位组成radix数组;对radix进行计数排序(利用计数排序适用于小范围数的特点)动图演示:#include<iostream> #include<vector> #include<random> #include<ctime> #include<iterator> #include&原创 2022-01-21 12:37:35 · 103 阅读 · 0 评论 -
【十大经典排序详解_选择排序】
选择排序选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给>二个元素选择第二小的,依次类推,直到第n-1个元素,第n个 元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么 交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。在原创 2022-01-18 22:02:24 · 491 阅读 · 0 评论 -
【十大经典排序详解_希尔排序】
希尔排序希尔排序可以说是插入排序的一种变种。无论是插入排序还是冒泡排序,如果数组的最大值刚好是在第一位,要将它挪到正确的位置就需要 n - 1 次移动。也就是说,原数组的一个元素如果距离它正确的位置很远的话,则需要与相邻元素交换很多次才能到达正确的位置,这样是相对比较花时间了。希尔排序就是为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进行排序。希尔排序的思想是采用插入排序的方法,先让数组中任意间隔为 h 的元素有序,刚开始 h 的大小可以是 h = n / 2,接着让 h = n /原创 2022-01-19 16:05:14 · 134 阅读 · 0 评论 -
【十大经典排序详解_计数排序】
计数排序计数排序统计小于等于该元素值的元素的个数i,于是该元素就放在目标数组的索引i位(i≥0)。计数排序基于一个假设,待排序数列的所有数均为整数,且出现在(0,k)的区间之内。如果 k(待排数组的最大值) 过大则会引起较大的空间复杂度,一般是用来排序 0 到 100 之间的数字的最好的算法,但是它不适合按字母顺序排序人名。计数排序不是比较排序,排序的速度快于任何比较排序算法。算法思想:找出待排序的数组中最大和最小的元素;统计数组中每个值为 i 的元素出现的次数,存入数组 C 的第 i原创 2022-01-21 11:31:39 · 96 阅读 · 0 评论 -
【十大经典排序详解_桶排序】
桶排序将值为i的元素放入i号桶,最后依次把桶里的元素倒出来。算法思想:设置一个定量的数组当作空桶子。寻访序列,并且把项目一个一个放到对应的桶子去。对每个不是空的桶子进行排序。从不是空的桶子里把项目再放回原来的序列中。代码:#include <iostream>#include <vector>#include <list>using namespace std;void insert(list<int>& bucket,原创 2022-01-21 12:31:28 · 370 阅读 · 0 评论 -
【十大经典排序详解_堆排序】
堆排序堆排序(Heapsort) 是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;堆排序的平均时间复杂度为 Ο(nlogn)。 堆排序1. 算法步骤2.动图演示3.代码1. 算法步骤原创 2022-01-20 23:33:01 · 140 阅读 · 0 评论 -
【指针加减运算和strlen() 函数】
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-12-21 21:09:35 · 490 阅读 · 0 评论 -
【字符串函数使用和实现详解_C语言实现】
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-12-11 22:58:19 · 944 阅读 · 0 评论 -
【字符数组操作函数使用和实现详解_C语言实现】
1. gdasuiskadhasoifhaskhdslk safojaof afdjaospf 2. void Pop(struct Node* pStack) 3. { 4. if (IsEmpty(pStack)) 5. return; pStack->iIndex -= 1;} 3. fmoif 4. afmsof 5. fmsoafp 6. afmopaef 7. afmoepafma' 8. famo 9. faof原创 2021-12-22 23:24:24 · 542 阅读 · 0 评论 -
【循环移动数组元素_C语言实现】
问题描述左移一个元素右移一个元素左移 K 个元素右移 K 个元素上面是采用元素一个个移动,下面采取逆置实现左移 K 个元素右移 K 个元素问题描述设计一个算法,将数组A[1:n]中的元素循环右移k位,要求只使用一个元素的附加空间,元素移动或交换次数为O(n).假如原数组: 1 2 3 4 5 6 7 需要右移4次,那么我们想要的结果是: 5 6 7 1 2 3 4。1.将1234逆置 变成 43212.将567逆置 变成 7653.将两个逆置数组拼接: 43217654.将这个已拼接的数组.原创 2021-12-24 19:31:58 · 1128 阅读 · 0 评论 -
【快慢指针_判断链表中是否存在环形_(C语言实现)】
快慢指针指的是有两个指针,每次前进的距离不同快慢指针的起点都一样:前进快的就是快指针 前进慢的就是慢指针快指针每次前进2格 慢指针每次前进一格bool QuikSlow(struct Node* head){ //参数合法性检测 if (NULL == head) return false; struct Node* quik = head->pNext; struct Node* slow= head->pNext; while (quik != NULL &a原创 2021-11-30 23:18:28 · 842 阅读 · 0 评论 -
【数据结构基础_双向循环链表(有空头)_(C语言实现)】
双向循环链表(含空头)双向循环链表呢,就是将尾结点指向头结点形成一个环形本文主要是针对双向循环链表进行增、删、改、查操作创建一个结构体当做节点struct Node{ int iData; struct Node* pNext; struct Node* pPre;};定义空头 //空头 struct Node stHead; stHead.iData = 0; stHead.pNext = &stHead; stHead.pPre = &stHead;原创 2021-11-30 23:02:47 · 820 阅读 · 0 评论 -
【数据结构基础_双向链表(有[*pHead]和[*pEnd])_(C++)】
此文为上一篇文章改为C++格式实现(多文件形式)头文件#pragma once#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;struct Node{ int iData; struct Node* pNext; //记录后一个节点地址 struct Node* pPre; //记录前一个节点的地址};class SX{private: s原创 2021-11-29 23:08:59 · 120 阅读 · 0 评论 -
【数据结构基础_双向链表(有[*pHead]和[*pEnd])_(C语言实现)】
双向链表(含头尾指针)双向链表呢,顾名思义,就是比单向多一个向前指向节点的一个指针本文主要是针对(含头尾指针)双向链表进行增、删、改、查操作创建一个结构体当做节点struct Node{ int iData; struct Node* pNext; //记录后一个节点地址 struct Node* pPre; //记录前一个节点的地址};前面我用的是局部定义头尾指针(每次调用都需要传参),这次咱们使用全局的定义头尾指针struct Node* g_pHead = NULL;原创 2021-11-29 22:01:15 · 773 阅读 · 0 评论 -
【数据结构基础_有空头单向链表_(C++)】
此文为上一篇文章改为C++格式实现(多文件形式)头文件#pragma once#include<iostream>#include<cstdio>using namespace std;struct Node{ int iData; struct Node* pNext;};class YK{private: struct Node stHead = { 0,NULL };public: YK(); ~YK();public: //尾添加原创 2021-11-29 20:41:11 · 296 阅读 · 0 评论 -
【数据结构基础_有空头单向链表_(C语言实现)】
有空头单向链表_(C语言实现)本文主要是针对(含空头)单向链表进行增、删、改、查操作创建一个结构体当做节点struct Node{ int iData; struct Node* pNext;};定义空头指针//空头struct Node stHead = { 0,NULL };空头不参加任何增、删,增加:1.尾添加此处和之前无空头链表操作只有稍微差别,咱们这次就不要尾指针了(当然你也可以尝试添加空的尾指针也是可以的),记住一定要先连后断//尾添加void AddT原创 2021-11-29 20:36:05 · 561 阅读 · 0 评论 -
【数据结构基础_有[*pHead]和[*pEnd]的单向链表_(C++实现)】
此文为上一篇文章改为C++格式实现头文件#pragma once#include<iostream>using namespace std;struct Node{ int iData; Node* pNext;};class List{private: Node* pHead; Node* pEnd; //pEnd指针是为了增加尾添加的效率,否则就要循环找尾 int iCount = 0;public: List(); ~List();private:原创 2021-11-18 21:25:12 · 591 阅读 · 0 评论 -
【数据结构基础_有[*pHead]和[*pEnd]的单向链表_(C语言实现)】
单向链表(含头尾指针)本文主要是针对(含头尾指针)单向链表进行增、删、改、查操作创建一个结构体当做节点struct Node{ int iData; struct Node* pNext;};定义头尾指针struct Node* pHead = NULL;struct Node* pEnd = NULL; pEnd指针是为了增加尾添加的效率,否则就要循环找尾增加:1.尾添加无(*pEnd)指针的尾添加void AddToEndNopEnd(struct Node**原创 2021-11-18 20:13:35 · 1317 阅读 · 0 评论 -
【数据结构基础_(动态数组(仿链表))_(C++实现)】
创建(DongShuzu)类,并把相关需要函数封装起来class DongShuzu{private: int* ShuZuTou; //首地址 unsigned int iRongLang; //容量 unsigned int iShuLiang; //已存储的数量 void ZengJiaKongJian(); //增加空间 void ChuShiHua(); //初始化public: DongShuzu(); ~DongShuzu();p原创 2021-11-17 22:09:53 · 246 阅读 · 0 评论 -
【数据结构基础(C语言实现)_(伪链表)】
伪链表:模拟链表首先得创建一个结构体struct Node{ int iValue; //数据 struct Node* pNext; //下一个节点的地址};实例化几个成员struct Node a = { 3,NULL }, b = { 5,NULL }, c = { 3,NULL }, d = { 3,NULL }; a.pNext = &b; b.pNext = &c; c.pNext = &d;1.遍历这个伪链表voi原创 2021-11-17 21:56:26 · 868 阅读 · 0 评论 -
【数据结构基础(C语言实现)】
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-11-17 21:26:13 · 931 阅读 · 0 评论