
数据结构
文章平均质量分 66
长臂人猿
进阶的猿猴
展开
-
快速掌握排序算法——快速排序(图解)
前言 八大排序算法中我们最常用的还是快排,其效率和代码实现难度上都符合使用情况。可是知道其原理,但是手撸代码很久没有实现后,总是会难免磕磕绊绊,故作此文快速回顾,引入图解页方便新学同学快速理解。代码与搭配食用更佳噢。排序之插入排序(直接插入、折半插入、希尔排序)堆排序(源码C)简述简单的说,快排本质上是一个个寻找数组中每个元素的正确位置的过程,这个过程中暂叫确定的元素叫标准位。首先寻找到标准位在目标排序中的正确位置——通过双指针Left和Right,以排序数组为区间,二者相向运动。具体为通过原创 2022-03-07 18:13:54 · 2696 阅读 · 1 评论 -
递归_汉诺塔问题_JAVA
思路怎么做呢?我们将问题简化,把它们看作两个饼:最大的饼和组合饼。这样即可形式化定义将现象我们转化为计算机可理解的数学公式:第一次的分解可知:H(N)=H(N-1)+1+H(N-1)这里我们将H(N)分成了两个盘子,一个最大的盘子和小盘的合并盘。将合并盘继续分解可以有:H(N-1)=H(N-2)+1+H(N-2)直到最终 H(2)=H(1)+1+H(1)=1+1+1=3别忘了 H(1)=1,a1=1,所以 H(1)=a1,则有汉诺塔的Java代码实现public原创 2021-03-03 18:51:28 · 290 阅读 · 2 评论 -
二分查找.基于有序数组的查找方法.704
前言抛砖引玉,先来个简单的。解题思路low mid high。(low <= high),没有=,会少比较最后一个mid代码class Solution { public int search(int[] nums, int target) { int low = 0; int high = nums.length - 1; int mid = 0; ...原创 2020-11-26 15:38:26 · 255 阅读 · 0 评论 -
通俗易懂链式结构(链表)
前言点击我快速入门链表有带头指针的,不带头指针的,带尾指针的等多种情况的链表,带不带,怎么带其实看你怎么设计他,原理都很简单。根据不断的创建新的结构体,并把每个next指向连接起来,比如: Node* one = (Node*)malloc(sizeof(Node)); Node* newOne = (Node*)malloc(sizeof(Node)); one->nex...原创 2020-01-11 15:58:03 · 5958 阅读 · 0 评论 -
数据结构快速入门——(链式)存储结构、头/尾指针和存储空间
前言数据结构总的来说就是存储结构 + 不同的结构特性的使用方法;比如说同样的存储结构,根据其不同的结构特性有链表、栈、队,他们不同在于入出的方法或者说是顺序不同,本质上都是线性存储结构。由于顺序表,实质上就是数组,这里不再累赘。存储结构存储结构是决定数据结构的基本单元,以链表为例,首先看一下链式存储的存储结构:typedef struct Node{ int data;...原创 2020-01-11 15:34:57 · 1002 阅读 · 0 评论 -
C易懂详解单链表(含图)
逐个代码行讲解最简单链表,并画出链表代码示意图。这个需要多画画图才能理解。一、先定义一个结构体typedef struct{ int data; //数据域 struct LNODE *next; // 指向下一个结构体的指针域} LNODE,*LinkList; // 结构体的别名二、前插法LinkList ...原创 2018-01-08 16:25:00 · 2824 阅读 · 2 评论 -
求最短路径之快速搞定弗洛伊德算法Floyd(C语言)
简介迪杰斯特拉算法求最短路径:单源求最短路径,实质是贪心策略,时间复杂度(n^2).实际上如果求出所有点之间的最短路径,时间复杂度为(n^3)与弗洛伊德算法相同,总的还是迪杰斯特拉较好,但比较复杂。弗洛伊德算法求最短路径:多源求最短路径——求出所有点之间的最短路径。时间复杂度为(n^3),实质上是暴力破解法——枚举法。构成:俩个矩阵:①由各点之间的路径权值构成,无法到达的点为INF(无...原创 2020-12-15 10:57:51 · 2551 阅读 · 1 评论 -
栈,一点就通(附上源码)
前言栈其实是一种线性表,本质上和链表是一样的——指的是存储结构,线性表都是跟珍珠项链一样串起来的,不同的是人为的定义了栈顶和栈底以及进出的push()和pop()函数,即人为创造其结构,目的就是获得后进先出的特性,这个特性无论是在二叉树的前中后序非递归遍历还是编译原理都需要用到这个特性,故人为定义十分有必要。图片来源于百度考试一般考的较多的除了代码就是:给定入栈顺序,判断可能的...原创 2020-01-15 01:06:42 · 246 阅读 · 0 评论 -
堆排序(源码C)
思路: 堆排序主要分为俩个部分,一个是构建堆(主要的,根节点下的俩个子节点大小差距不一定,其子节点不一定按顺序排),另外一个是调整堆。 构建堆(第一个for循环,自下而上)之后,初步的顺序出来了,堆顶便是最大的值,我们将他定为老大,俩个子节点为老二,俩个老二分别代表俩个分支,他们分别是俩个分支中的最强者(一人之下万人之上的.........原创 2018-03-10 23:00:24 · 800 阅读 · 0 评论 -
最短路径之Dijkstra(迪杰斯特拉)算法(无向图)
简介 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。由for循环可知,其时间复杂度是O(n^2)。原理 在已知图的邻接矩阵net.vexs[i][j](无向网,含权值的图)的条件下,通过遍历已知图的所有路径,用dis[i]数组来记录到i点...原创 2018-01-08 16:52:54 · 65259 阅读 · 36 评论 -
排序之插入排序(直接插入、折半插入、希尔排序)
一、直接插入排序 直接插入排序是插入排序中最简单的一种排序,同时也是其他插入排序的基础。直接插入排序最好情况下:只要遍历n次,最糟糕的情况下遍历n^2次。 那么让我们来白话谈一谈直接插入排序的思想:将待排序数组分为俩部分: ①已经排序的有序原创 2018-01-09 16:22:05 · 558 阅读 · 0 评论 -
通俗易懂的KMP算法详解(严蔚敏版C语言)
最近,需要复习KMP算法的next数组,然后回头看半年多后的我回头看半年多前自己综合别人内容写的介绍。 没错,自己也看不懂。然后,自己再根据自己的理解写了一下理解透彻的笔记,方便理解记忆,当然,以前的代码解释部分可以参考,笔记算法思维和算法的实现有一定的出入。望君谅解。(2018.9.30) ...原创 2019-03-16 00:12:26 · 43399 阅读 · 8 评论