数据结构
wang13342322203
这个作者很懒,什么都没留下…
展开
-
堆排序(未调好)
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#include<math.h>#include<stdbool.h>void Swap(int *nums, int a, int b){ int midNum = nums[a]; nums[a] = nums[b]; nums[b] = midNum;.原创 2020-06-29 08:16:40 · 466 阅读 · 0 评论 -
LeetCode Binary Search Summary 二分搜索法小结
二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,具有很大的应用场景,而在 LeetCode 中,要运用二分搜索法来解的题目也有很多,但是实际上二分查找法的查找目标有很多种,而且在细节写法也有一些变化。之前有网友留言希望博主能针对二分查找法的具体写法做个总结,博主由于之前一直很忙,一直拖着没写,为了树立博主言出必行的正面形象,不能再无限制的拖下去了,那么今...转载 2019-07-20 11:55:38 · 134 阅读 · 0 评论 -
二叉树的遍历——递归和非递归
原文:https://www.cnblogs.com/heyonggang/p/3399464.html二 叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是 递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历...转载 2019-06-30 12:00:30 · 519 阅读 · 0 评论 -
递归算法讲解
原作者:书呆子Rico 《递归的内涵与经典应用》http://my.csdn.net/justloveyou_摘要: 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归。毋庸置疑地,递归确实是一个奇妙的思维方式。对一些简单的递归问题,我们总是惊叹于递归描述问题的能力和编写代码的简...转载 2019-07-08 21:09:39 · 230 阅读 · 0 评论 -
什么是递归?先了解什么是递归.
原文:https://www.cnblogs.com/Pushy/p/8455862.html什么是递归?先了解什么是递归.欢迎阅读我的个人博客,有更好的排版和文章:https://pushy.site1. 介绍一说起递归,我想每个人都不陌生。举个从小就听过的例子:从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山...转载 2019-06-25 17:06:49 · 702 阅读 · 0 评论 -
循环迭代遍历递归的区别
原地址:https://www.cnblogs.com/johnny1024/p/8125182.htmlloop、iterate、traversal和recursion这几个词是计算机技术书中经常会出现的几个词汇。众所周知,这几个词分别翻译为:循环、迭代、遍历和递归。乍一看,这几个词好像都与重复(repeat)有关,但有的又好像不完全是重复的意思。那么这几个词到底各是什么含义,有什么区别和联...转载 2019-06-25 16:59:51 · 1834 阅读 · 0 评论 -
算法-动态规划 Dynamic Programming--从菜鸟到老鸟
原地址:https://blog.csdn.net/u013309870/article/details/75193592前言最近在牛客网上做了几套公司的真题,发现有关动态规划(Dynamic Programming)算法的题目很多。相对于我来说,算法里面遇到的问题里面感觉最难的也就是动态规划(Dynamic Programming)算法了,于是花了好长时间,查找了相关的文献和资料准备彻底的...转载 2019-06-11 18:06:32 · 122 阅读 · 0 评论 -
动态规划
原地址:https://www.cnblogs.com/raichen/p/5772056.html动态规划通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。基本思想若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。 通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次...转载 2019-06-11 10:51:39 · 268 阅读 · 0 评论 -
深究递归和迭代的区别、联系、优缺点及实例对比
原地址:https://www.cnblogs.com/zhizhan/p/4892886.html1.概念区分递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合.使用递归要注...转载 2019-06-11 10:49:31 · 294 阅读 · 0 评论 -
看动画轻松理解「 堆 」
原地址:https://mp.weixin.qq.com/s?__biz=MzUyNjQxNjYyMg==&mid=2247484290&idx=1&sn=971ae3365a8a9d284e427e623d825bba&scene=21#wechat_redirect堆(heap)又被为优先队列(priority queue)。尽管名为优先队列,但堆并...转载 2019-06-20 12:22:15 · 302 阅读 · 0 评论 -
【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章
原地址:https://mp.weixin.qq.com/s?__biz=MzIwNTc4NTEwOQ==&mid=2247486981&idx=1&sn=c63cd080beba13ba695fdf60cfa25088&chksm=972adf7fa05d5669504023b67b4ce57a0c6ecc2d71713582a1b31937f6d61009416...转载 2019-06-20 10:58:34 · 333 阅读 · 0 评论 -
非递归实现二叉树遍历(附c++完整代码)
原文:https://blog.csdn.net/happyjacob/article/details/83116702先序、中序和后序遍历过程:遍历过程中经过结点的路线一样,只是访问各结点的时机不同。从图中可以看到,前序遍历在第一次遇见元素时输出,中序遍历在第二次遇见元素时输出,后序遍历在第三次遇见元素时输出。非递归算法实现的基本思路:使用堆栈一、前序遍历1、递归实现遍历过...转载 2019-06-30 12:01:51 · 341 阅读 · 0 评论 -
深究递归和迭代的区别、联系、优缺点及实例对比
原地址:https://www.cnblogs.com/zhizhan/p/4892886.html1.概念区分递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合.使用递归要注...转载 2019-07-06 17:51:30 · 219 阅读 · 0 评论 -
[算法总结] 二分查找
二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,但它有一个前提,就是必须在有序数据中进行查找。二分查找很好写,却很难写对,据统计只有10%的程序员可以写出没有bug的的二分查找代码。出错原因主要集中在判定条件和边界值的选择上,很容易就会导致越界或者死循环的情况。下面对二分查找及其变形进行总结:1. 最基本的二分查找public int ...转载 2019-08-30 14:52:27 · 210 阅读 · 0 评论 -
动态规划三种写法
Leetcode 198你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (...原创 2019-08-16 15:33:02 · 331 阅读 · 0 评论 -
linux下epoll实现机制
linux下epoll实现机制原作者:陶辉链接:http://blog.csdn.net/russell_tao/article/details/7160071先简单回顾下如何使用C库封装的select系统调用吧int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct ...转载 2019-08-16 12:24:45 · 270 阅读 · 0 评论 -
C++常用查找算法总结(一)
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找,字段的查找,等等。1、查找算法总结(1). 最容易理解的查找算法,顺序查找法 说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表。 基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k...转载 2019-08-10 11:39:12 · 319 阅读 · 0 评论 -
42.连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序...原创 2019-08-01 16:39:05 · 80 阅读 · 0 评论 -
非常特别的一个动态规划新手教程
非常特别的一个动态规划新手教程今天在网上看到一个讲动态规划的文章,是以01背包为例的,这文章和书上的解说很不一样,令我眼前一亮,于是转载一下下~~~(说明一下,本人很痛恨教材公式定理漫天飞,实际的解说却讲得很枯涩难懂,这样的中国式的教育已经延绵了几千年了,如今中国的教材还是这个样子,讲清楚些明确些就那么难么?高中有个老师讲的一句话一直认为很有道理:“教得会天才不是真本事,能把博士生的东西讲到...转载 2019-08-01 16:26:41 · 100 阅读 · 0 评论 -
STL 堆heap的用法
STL中并没有把heap作为一种容器组件,heap的实现亦需要更低一层的容器组件(诸如list,array,vector)作为其底层机制。Heap是一个类属算法,包含在algorithm头文件中。虽然STL中关于heap默认调整成的是大顶堆,但却可以让用户利用自定义的compare_fuction函数实现大顶堆或小顶堆。heap的低层机制vector本身就是一个类模板,heap基于vector便实...转载 2019-07-31 11:47:32 · 226 阅读 · 0 评论 -
快排算法
void quicksort(vector<int>& numbers, int low, int high) { if(low >= high)return; int middle = partition(numbers, low, high); quicksort(numbers, low, middl...原创 2019-07-31 11:07:15 · 247 阅读 · 0 评论 -
算法入门6:回溯法
1. 简单概述 回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。基本思想类同于:图的深度优先搜索 二叉树的后序遍历 【 分支限界法:广度优先搜索 思想类同于:图的广度优先遍历 ...转载 2019-07-30 20:39:04 · 191 阅读 · 0 评论 -
结构之美:单链表的头结点与头指针
原地址:http://www.nowamagic.net/librarys/veda/detail/1805当链表的每个结点只包含一个指针域时,我们称此链表为单链表。关于单链表的存取,有时候我们在单链表的第一个结点(有效元素)之前附设一个结点,称之为头结点;指向头结点的指针,称之为头指针;对单链表的存取必须从头指针开始进行,由于单链表的最后一个数据元素没有直接后继,则指针为NULL。...转载 2019-06-02 13:11:47 · 257 阅读 · 0 评论 -
单链表中头指针与头结点的关系
头指针与头结点不同,头结点即第一个结点,头指针是指向第一个结点的指针。链表中可以没有头结点,但不能没有头指针。以下是头指针与头结点的关系:typedef struct LNode{int data;struct LNode *next;}LNode,*LinkList; //定义结点的结构体定义LinkList L;则L为链表的头指针。L=(LinkList) mal...转载 2019-06-02 12:48:16 · 2925 阅读 · 0 评论 -
关于传递指针与传递引用作参数的测试
原地址:https://blog.csdn.net/cprimesplus/article/details/89547879前言以单链表作示范,对比传递指针作参数与传递引用作参数的不同之处。传递指针作参数测试代码图示说明:我先在主函数创建了一个节点存放值1 11,然后在CreateLink() CreateLink()CreateLink()函数中创建另一个值为2 22的节点并让...转载 2019-05-29 22:28:53 · 217 阅读 · 0 评论 -
Dijkstra算法
http://new-play.tudou.com/v/XMzUyMjUwNzc4OA==.html转载 2019-04-17 14:47:53 · 92 阅读 · 0 评论 -
生动的普里姆算法详解
https://blog.csdn.net/qq_41076797/article/details/83822801一:普里姆算法的介绍:针对无向图用来生成最小生成树的算法。二:普里姆算法的步骤:起始条件:首先你有一个初始点v,所以此刻的点集V={v},边集S为空,同时准备两个数组,数组A记录所有点与起始点的权值(当然,如果不直接和起...转载 2019-04-16 16:26:36 · 1096 阅读 · 0 评论 -
KMP匹配详细讲解+next数组真正理解
之前转载过一篇kuangbin大佬的kmp模板,只会用,但是不清楚原理现在看了某大佬的文章,发现讲解的非常精彩,但是有一点不足就是没讲清楚KMP时间复杂度问题,但是自己的语言组织能力以及理解能力也不是很好,所以就直接copyt过来了。希望_july_v博主不介意。http://www.cnblogs.com/kuangbin/archive/2012/08/14/2638803.htmlht...转载 2019-04-01 16:47:58 · 1292 阅读 · 0 评论 -
KMP算法(研究总结,字符串)
KMP算法(研究总结,字符串)http://www.cnblogs.com/SYCstudio/p/7194315.html前段时间学习KMP算法,感觉有些复杂,不过好歹是弄懂啦,简单地记录一下,方便以后自己回忆。引入首先我们来看一个例子,现在有两个字符串A和B,问你在A中是否有B,有几个?为了方便叙述,我们先给定两个字符串的值A="abcaabababaa"B="abab"...转载 2019-03-30 10:44:49 · 129 阅读 · 0 评论 -
常见数据结构与算法整理总结(上)
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下面是自己整理的常用数据结构与算法相关内容,如有错误,欢迎指出。为了便于描述,文中涉及到的代码部分都是用Java语言编写的,其实Java本身对常见的几种数据结构,线性表、栈、队列等都提供了较好的实现,就是我们经常用到的Java集合框架,有需要的...转载 2018-11-21 09:26:22 · 466 阅读 · 0 评论 -
C++ 单链表基本操作分析与实现
链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。 创建头节点 手动new一个新的Node,将Node的next置为NULL...转载 2018-06-27 20:13:23 · 18583 阅读 · 1 评论 -
List (单链表17个函数讲解)
原地址:https://blog.csdn.net/l953972252/article/details/51364839链表时一种常用的数据结构,是通过“链”来建立起数据元素之间的逻辑关系,这种用链接方式储存的线性表简称链表(Link List)。一,链表与顺序表的对比 在接触链表之前大家想必已经了解过了顺序表的储存结构方式,顺序表与链表的不同之处如下: 1.顺序表是物理位置上相邻来表示数据元素...转载 2018-06-27 20:06:37 · 1622 阅读 · 0 评论 -
单链表 c实现 详细注释
原地址:https://blog.csdn.net/sinat_40477296/article/details/78877547经过很长时间的研究,因为刚学指针就像拿单链表来实现以下, 单链表其实只要理解了 指针域的移动就不是问题了 从开始的抄代码 到后面的自己写 参考书目《大话数据结构》#include <stdio.h>#include <stdlib.h>#in...转载 2018-06-27 19:35:20 · 192 阅读 · 0 评论 -
链表数据结构(C/C++语言实现)
注意:没有使用malloc和free;加了一个头文件,用于清屏和暂停;还有就是一个错误特别容易被忽略,那就是主函数中声明了LinkList p,然后就直接创建链表,忘了给p分配空间。一定要先初始化链表再建立。以下代码说白了就是一个个的函数堆出来的,只是要注意函数的参数有时候有引用符&,有时候没有,我总结了一个便于记忆的小技巧:如果你想要对链表做出任何改变,请一定加上&;如果你对链表...转载 2018-06-27 19:06:28 · 156 阅读 · 0 评论 -
最短路径Dijkstra算法
https://v.youku.com/v_show/id_XMzkzMzg4NTA4NA==.html转载 2019-04-17 15:35:25 · 121 阅读 · 0 评论 -
(迪杰斯特拉)Dijkstra算法详细讲解
http://www.cnblogs.com/skywang12345/p/3711512.html#anchor2迪杰斯特拉算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起...转载 2019-04-18 13:54:48 · 142708 阅读 · 16 评论 -
Floyd-傻子也能看懂的弗洛伊德算法(转)
https://www.cnblogs.com/wangyuliang/p/9216365.html暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。 上图中有4个城市8条公路,公路上的数字表示这条公路的长短。请注意这些公路是单向的。我们现在需要求任意两...转载 2019-04-18 21:44:37 · 509 阅读 · 1 评论 -
单链表的创建--从零开始递引用作参数的测试
原地址:https://blog.csdn.net/cprimesplus/article/details/82588179学习链表需要了解的基本知识点:首先,想要熟练使用链表,就要知道两大类基本知识点:1. 指针 2.结构体(如果对两个知识点有疑惑请百度一下,没有什么问题是百度一下解决不了的,如果有就百度两下,哈哈)结构体定义部分:struct node{int num;s...转载 2019-05-29 22:28:04 · 222 阅读 · 0 评论 -
链表基础知识总结
原地址:https://blog.csdn.net/u012531536/article/details/80170893链表和数组作为算法中的两个基本数据结构,在程序设计过程中经常用到。尽管两种结构都可以用来存储一系列的数据,但又各有各的特点。数组的优势,在于可以方便的遍历查找需要的数据。在查询数组指定位置(如查询数组中的第4个数据)的操作中,只需要进行1次操作即可,时间复杂度为O(1)...转载 2019-05-29 22:13:41 · 239 阅读 · 0 评论 -
递归+分治+贪心+动态规划
原地址:https://blog.csdn.net/blue_blue001/article/details/80898579递归+分治+贪心+动态规划递归1. 定义:一个函数在结束之前,直接或间接调用自身称为递归。2. 思想:将一个不好解决的大问题转化为若干小问题,再把这些小问题进一步分解为更小的小问题,直至每个小问题可以直接解决为止。3. 要素(1)递归体:使问题...转载 2019-05-28 16:22:41 · 246 阅读 · 0 评论