自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

转载 在linux下安装OpenMVG和OpenMVS

前言本文章主要参考https://www.it610.com/article/1282324582472105984.htm所写,主要流程与该文章相同,本文以自己安装流程在其中添加了一些小细节供读者参考。本文章主要针对于新系统和小白安装openmvg和openmvs,大佬请随意。我采用的系统是,连接云服务器的软件是xshell,连接云服务器软件的不同并不会影响整个安装过程,可能有些linux指令不同,我会在指令前表明指令的用途,小白可自行百度在自己连接云服务器软件上如何实现该功能。作为一个小

2021-07-22 12:07:19 2707 2

原创 Linux--基础指令-打包压缩指令

1 文件压缩  文件压缩理解的简单一些的话,就是按照指定的一张表,将相同的数据以特殊数据进行替换,让内容变少,解压缩就是替换回来,文件压缩存在多种不同算法,压缩比率也不相同。  常见的压缩方式有:zip、gzip和bzip2。2 zip/unzip指令语法:zip 压缩文件.zip 目录或文件功能:将目录或文件压缩成.zip格式常用选项:-r 递归处理,将指定目录下的所有文件和子目录一并处理例:将下图中abc目录和test.txt文件打包并解包压缩:解压缩:3 gzip/gun

2021-03-05 00:01:55 389 2

原创 Linux--基础指令-文件相关指令

1 基础知识1.1 文件的时间属性文件的时间属性有三种:  最后一次访问时间(Access);  最后一次修改时间(Modify);  最后一次状态改变时间(Change);其中,最后一次访问时间和修改时间可手动设定时间,而最后一次状态改变时间只能记录当前时间。2 touch指令语法:touch 【选项】 文件功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件常用选项:-d 使用指定的日期时间,而非现在的时间-a 或–time=at

2021-03-04 22:10:44 382 1

原创 Linux--基础指令-目录相关指令

基础指令的组成部分:  命令名称 [操作选项] [操作对象]每一个命令的功能可能非常丰富,但不是每一个功能都要直接使用,而是特定的情况下才会使用,因此有了操作选项。1 基础知识1.1 Linux下的目录结构Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件,下图为作者电脑的目录树的一部分:目录:就是我们常说的文件夹;绝对路径:以根目录作为起始的路径,如:/home/dev/mystudy;相对路径:以当前目录作为起始的路径,随着当前所在目录的不

2021-03-04 15:21:07 302

原创 数据结构--排序算法复杂度及稳定性分析

1 验证各种排序算法的时间数量级void testOP() { srand(time(0)); const int N = 100000; int* a1 = (int*)malloc(sizeof(int) * N); int* a2 = (int*)malloc(sizeof(int) * N); int* a3 = (int*)malloc(sizeof(int) * N); int* a4 = (int*)malloc(sizeof(int) * N); int* a5 = (int

2021-02-26 00:25:01 228

原创 数据结构--计数排序(鸽巢原理)

1 基本思想计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。操作步骤:统计相同元素出现次数根据统计的结果将序列回收到原来的序列中2 算法示意图3 程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>void countSort(int* arr, int n) { int max , min; max = min = arr[0]; //找到最大值和最小值 for (in

2021-02-25 22:47:38 337

原创 数据结构--归并排序

1 基本思想归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有序,在使子序列段间有序。若将两个有序表合并称一个有序表,称为二路归并。2 算法示意图3 递归实现归并排序#include<stdio.h>#include<stdlib.h>#include<string.h>//tmp辅助空间 arr待排序数组void merge(int* arr, int

2021-02-25 22:16:08 196

原创 数据结构--冒泡排序和快速排序

1 交换排序根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。2 冒泡排序2.1 基本思想在区间[0,n-1]中,相邻元素进行比较,大的元素向后移动,并减小区间,在[0,n-2]中重复上述操作,直至不再有元素的移动或者区间大小为1时排序完成。2.2 算法示意图2.3 程序代码#include<stdio.h>#include<stdlib.h>void swap(i

2021-02-25 18:41:30 450

原创 数据结构--直接选择排序和堆排序

1 选择排序2 直接选择排序2.1 基本思想2.2 算法示意图2.3 程序代码2.4 验证代码2.5 直接选择排序特性3 堆排序2.1 基本思想2.2 算法示意图2.3 程序代码2.4 验证代码2.5 堆排序特性

2021-02-21 23:19:06 217

原创 数据结构--直接插入排序与希尔排序

1 插入排序直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键字码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。2 直接插入排序2.1 基本思想当插入第i(i>=1)i(i>=1)i(i>=1)个元素时,前面的array[0]、array[1]、…、array[i-1]已经排好序,此时用array[i]的排序码与array[i-1]、array[i-2]、…的排序码顺序进行比较,找到插入位置即将array[i]插

2021-02-21 18:55:05 283 3

原创 数据结构--排序简介

1 排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或者递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j]r[i] = r[j]r[i]=r[j],且r[i]r[i]r[i]在r[j]r[j]r[j]之前,而在排序后的序列中,r[i]r[i]r[i]仍在r[j]r[j]r[j]之前,则称这些排序算法是稳定的,否则称为不稳定的。内部排序:数据元素全部放在内存中的

2021-02-21 15:03:10 170

原创 数据结构--递归、非递归实现二叉树的后序遍历

1 后序遍历完成int* preorderTraversal(struct TreeNode* root, int* returnSize)函数,使其可以实现前序遍历的功能题目链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/1.1 递归实现 int getSize(struct TreeNode* root){ if(root == NULL) return 0 ; return

2021-02-21 00:21:23 138

原创 数据结构--递归、非递归实现二叉树的中序遍历

1 中序遍历完成int* preorderTraversal(struct TreeNode* root, int* returnSize)函数,使其可以实现前序遍历的功能题目链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/1.1 递归实现 int getSize(struct TreeNode* root){ if(root == NULL) return 0 ; return ge

2021-02-20 19:01:26 149

原创 数据结构--递归、非递归实现二叉树的前序遍历

1 前序遍历完成int* preorderTraversal(struct TreeNode* root, int* returnSize)函数,使其可以实现前序遍历的功能1.1 递归实现struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right;};int getSize(struct TreeNode* root){ if(root == NULL) return 0 ;

2021-02-20 18:46:58 240

原创 数据结构--二叉树OJ习题2

1 单值二叉树1.1 题目介绍1.2 题目分析1.2.1 基本思路1.2.2 关键变量1.3 程序代码1.4 运行结果

2021-02-20 17:23:55 377

原创 数据结构--二叉树OJ习题1

1 单值二叉树1.1 题目介绍如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例 1:输入:[1,1,1,1,1,null,1]输出:true来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/univalued-binary-tree1.2 题目分析使用递归的思路来进行解题:定义新的函数:bool _isUnivalTree(struct Tree

2021-02-20 00:01:46 372

原创 数据结构--二叉树的二叉链表实现

1 二叉树的二叉链表示意图  二叉链表的每个结点由三个域组成:数据域,左指针域和右指针域。左右指针分别用来保存左右孩子结点的存储地址。2 二叉链表实现二叉树2.1 头文件及其定义

2021-02-19 16:36:21 6508

原创 数据结构--二叉树链式结构的遍历

1 二叉树的链式结构  二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链表来指示元素的逻辑关系。  链式结构可以分为二叉链表和三叉链表,我们使用最多的是二叉链表。  二叉链表的每个结点由三个域组成:数据域,左指针域和右指针域。左右指针分别用来保存左右孩子结点的存储地址。2 二叉树链式结构的遍历 所谓遍历是指沿着某条搜索路线,依次对树中每个结点均做一次且仅作一次访问。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,是二叉树上进行其他运算之基础。2.1 前序遍历:

2021-01-24 22:41:35 703

原创 数据结构--堆排序

1 堆排序的概述利用堆的性质,我们可以实现对数组的排序。大小为n的数组看作一棵完全二叉树,将其创建成大根堆,交换堆顶与堆的最后一个元素,之后将前n-1个数据看作一棵完全二叉树,再次调整成堆,以此类推,直至只剩一个元素,这时已将数组排序完成。示意图如下:2 堆排序的算法#include<stdio.h>#include<stdlib.h>typedef int HPDataType;/*实现数组中两个位置值的交换*/void Swap(HPDataType* ar

2021-01-24 17:26:00 189

原创 数据结构--堆的概念及实现

1 堆的概念及结构如果有一个关键码的集合K={k0,k1,k2,...,kn−1}K = \{ k_0 , k_1 , k_2,...,k_{n-1} \}K={k0​,k1​,k2​,...,kn−1​},把它的所有元素按照完全二叉树的顺序存储方式存储在一个一维数组中,并满足Ki<=K2i+1且Ki<=K2i+2,i=0,1,2......K_i <= K_{2i+1}且K_i <= K_{2i+2},i=0,1,2......Ki​<=K2i+1​且Ki​<=K2

2021-01-24 16:48:37 313

原创 数据结构--二叉树的数组实现

对于一棵二叉树,可以将结点从上至下从左至右的顺序依次存入数组中,如下图:但是,一般使用数组只适合表示完全二叉树,而不适合用来存储非完全二叉树,因为可能存在大量的空间浪费,如下图所示:堆是一种特殊的完全二叉树,故我们一般使用数组来存储堆。需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。下一篇我们将详细的介绍堆的概念及其实现。...

2021-01-22 23:33:24 714

原创 数据结构--二叉树的概念和结构

1 二叉树的概念一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:1.每个结点最多有两棵子树,即二叉树不存在度大于2的结点。2.二叉树的子树有左右之分,即子树的次序不能颠倒。2 数据结构中的二叉树3 特殊的二叉树3.1 满二叉树一个二叉树,如果每一层的结点都达到最大值,则这个二叉树就是满二叉树。即,如果一个二叉树的层数为k,且结点数为2k−12^k-12k−1,则它就是满二叉树。3.2 完全二叉树对一个满二叉树

2021-01-22 22:25:47 965

原创 数据结构--树的概念及结构

1 树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像是一颗倒挂的树。树的定义:有一个特殊的结点,称为根节点,根节点没有前驱结点。除根节点外,其余节点被分成M(M>0)个互不相交的集合T1、T2、…Tm,其中每一个集合Ti(1<=i<=m)又是一颗结构与树类似的子树。每个子树的根节点有且只有一个前驱,可以有0个或多个后继。因此,树是递归定义的。2 树的性质子树互不相交;除了根节点外,每个

2021-01-21 23:24:47 1298

原创 数据结构---栈和队列OJ习题

1 括号匹配问题1.1 题目介绍给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:    左括号必须用相同类型的右括号闭合。    左括号必须以正确的顺序闭合。注意:空字符串可被认为是有效字符串。示例 1:输入: “([])”输出: true示例 3:输入: “(][)”输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-paren

2021-01-19 22:16:47 469 1

原创 数据结构--循环队列的数组实现

1 循环队列的概念

2021-01-19 17:50:31 540

原创 数据结构--队列的数组实现

1 数组实现队列的示意图队列的表示如下:进行入队操作(尾插):进行出队操作(头删):2 数组实现队列2.1 头文件及其定义#include<stdio.h>#include<stdlib.h>typedef int QDataType;typedef struct Queue { QDataType* data;//存储队列的数据 int rear; //表示队尾,指向队列最后一个元素的下一个位置 int capacity;//表示数组的大小}Q

2021-01-18 21:55:23 119

原创 数据结构--队列的链表实现

1 链表实现队列的示意图使用单向无头非循环链表来表示队列,这里对链表进行优化,添加一个尾指针,指向队列的队尾,链表表头则指向队列的队头。进行入队操作(尾插):进行出队操作(头删):2 链表实现队列2.1 头文件及其定义#include<stdio.h>#include<stdlib.h>typedef int QDataType;typedef struct QNode { QDataType data; struct QNode* next;} Q

2021-01-18 21:07:49 413

原创 数据结构--队列的概念及结构

1 队列的概念队列是一种特殊的线性表,它只允许在一端进行插入数据操作,在另一端进行删除数据的操作。进行插入操作的一端称为队尾,进行删除操作的一端称为队头。2 入队和出队入队:队列的插入操作称为入队。出队:队列的删除操作称为出队。3 队列的实现队列可以使用数组和链表进行实现,但是由于数组在出数据的时候效率较低,这里选择使用链表来实现队列。...

2021-01-18 19:34:12 768

原创 数据结构--栈的双向带头循环链表实现

1 链表实现栈的示意图使用双向带头循环链表来表示栈,表头和表尾均可表示为栈顶,这里以表头为栈顶为例。进行入栈操作(头插):进行出栈操作(头删):2 链表实现栈2.1 头文件及其定义#include<stdio.h>#include<stdlib.h>typedef int STDataType;typedef struct LstkNode { STDataType data; struct ListNode* prev; struct ListNod

2021-01-10 20:59:51 831

原创 数据结构--栈的数组实现

1 数组实现栈的示意图栈stack的表示如下:进行入栈操作(尾插):进行出栈操作(尾删):2 数组实现栈2.1 头文件及定义定长的静态栈的结构#include<stdio.h>#include<stdlib.h>typedef int STDataType;//数组为静态数组,无法进行扩容#define N 10typedef struct Stack{ STDataType a[N]; int top; // 栈顶}Stack;支持动态

2021-01-10 19:45:23 250

原创 数据结构--栈的基本概念

1 栈的概念及结构1.1 栈的概念栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。实际中的案例:一群人乘坐电梯,先进电梯的人最后出电梯,最后进电梯的人最先出电梯。1.2压栈与出栈压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据在站栈顶。2 栈的实现栈的实现一般可以使用数组或者链表实现,相对而言

2021-01-10 19:42:25 758

原创 数据结构--顺序表与链表的区别

1 顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。  优点:(1)存储空间连续;(2)支持随机访问;(3)空间利用率高,不容易造成内存碎片;(4)尾插尾删操作效率高。  缺点:(1)在中间或者前面插入数据时的时间复杂度为O(n);(2)存储空间的容量可能不够用,可能存在增容的问题,而增容的代价很高。2 链表链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 

2021-01-10 15:23:35 1325

原创 数据结构--双向带头循环链表接口的实现

1 双向带头循环链表结构双向带头循环链表的示意图如下:它的定义如下://无头单向非循环链表的定义typedef int LDataType ;typedef struct ListNode {LDataType data ;struct ListNode* next ;struct ListNode* prev ;}ListNode;typedef struct List {struct ListNode* head;}List;2 无头单向非循环链表接口的实现2.1 头

2021-01-08 19:00:36 149

原创 数据结构--链表OJ习题3

5 移除链表结构5.1 题目介绍5.2 题目分析5.2.1 基本思路5.2.2 关键变量5.3 程序代码5.4 代码运行

2020-12-27 21:39:43 260

原创 数据结构--链表OJ习题2

1 链表分割1.1 题目介绍现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。题目连接:链表分隔1.2 题目分析1.2.1 基本思路步骤一:申请两个链表lessHead,greaterHead并指向链表表尾元素的指针为lessTail,greaterTail;步骤二:依次遍历链表,若当前节点的值小于x的节点插入lessHead中,否则插入greaterHead中;步骤三:将g

2020-12-27 17:47:18 491

原创 数据结构--链表OJ习题1

1 移除链表结构1.1 题目介绍删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5题目来源:https://leetcode-cn.com/problems/remove-linked-list-elements/description/1.2 题目分析1.2.1 基本思路步骤一:定义一个指针变量cur用来遍历整个链表,指针变量p

2020-12-27 10:23:58 409

原创 数据结构--无头单向非循环链表接口的实现

1 无头单向非循环链表结构无头单向非循环链表的示意图如下:它的定义如下://无头单向非循环链表的定义typedef int LDataType;typedef struct ListNode {LDataType data;struct ListNode* next;}ListNode;typedef struct List {ListNode* head;}List;2 无头单向非循环链表接口的实现2.1 头文件及链表的定义#include<stdio.h>

2020-12-17 11:48:48 162

原创 数据结构--链表概念及常见链表结构

1 链表的概念链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表的结构由以下8种:1、不带头单向循环结构2、不带头单向非循环结构3、不带头双向循环结构4、不带头双向非循环结构5、带头单向循环结构6、带头单向非循环结构7、带头双向循环结构8、带头双向非循环结构存储结构如下:不带头单向循环结构不带头单向非循环结构不带头双向循环结构不带头双向非循环结构带头单向循环结构带头单向非循环结构

2020-12-17 00:09:25 10721

原创 数据结构--顺序表OJ习题

1 数组形式的整数加法   对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。  给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer程序代码为:...

2020-12-15 16:27:41 659

原创 数据结构--线性表与顺序表

1 线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表指的是在逻辑上是线性结构,也就是指连续的一条直线。但在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。数组的存储结构:链表的存储结构:2 顺序表2.1 顺序表的概念与结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。

2020-12-08 11:24:31 8248 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除