自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

photoresist的博客

photoresist

  • 博客(35)
  • 问答 (1)
  • 收藏
  • 关注

原创 深度优先搜索(c++)

深度优先搜索:DFS深度优先搜索类似于树的先序遍历,只不过树只有两个方向,而图有多个方向,常见的二维矩阵有四个遍历方向。可以使用递归来写,较为简单,也可以写成栈实现,不会出现溢出等情况。关于二维矩阵遍历的方向,我们可以使用一个数组来简单表示vector<int> direction{-1,0,1,0,-1} //分别是上、右、下、左四个方向我们以LeetCode695这道题目为例来说明给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代

2021-04-20 22:03:48 535 1

原创 leetcode215:第K大的值

题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-element-i

2021-04-02 02:50:42 187

原创 快速排序的几种写法(c++)

快速排序快速排序一般使用双指针与分而治之的思路来进行排序,所有函数都使用左闭右开区间快排的时间复杂度:O(NlogN)空间复杂度:logN不稳定:排序算法不稳定的定义是如果相等的数发生了交换,那么就不稳定快排遍历条件含有等于,也就是key值交换后,等于它的可能排在key前面了,所以不稳定,如果一个数组全部相等,快排的效率很低双边遍历1:双指针相遇1.选定一个比较点(一般使用第一个元素)key,两个指针first(初始值0),last(初始值:最后一个元素),之所以采用左闭右闭区间,是因为key

2021-04-02 02:41:34 2138 2

原创 namespace命名空间的使用

namespace的作用最初使用namespace是初学c++时,常在头文件处加上using namespace std; std就是包含c++标准库函数、对象名的命名空间,譬如cout,想使用这个函数名,可以有以下三种方式,一般还是推荐使用第三种方式。1.using namespace std;//using指示2.using std::cout; //using声明3.std::cout<<" "<<std::endl;至于为什么要搞一个命名空间关键字,就是通常在

2021-03-24 21:32:51 359

原创 sort函数的用法

@TOC简单用法sort()函数有三个参数,第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址,第三个参数为比较参数sort()函数包含在algorithm头文件中,要加上这个文件头#include <algorithm>sort()函数默认是对数据进行升序排列vector<int> a;sort(a.bengin(),a.end());自定义排序比较函数自己定义一个排序方式,比如需要降序排列,可以先写一个比较函数bool cmp(int a,

2021-03-20 21:35:11 274

原创 平衡二叉树(c++)

平衡二叉树定义平衡二叉树类二叉树的调整右单旋左单旋左右双旋插入删除操作完整代码定义平衡树(Balance Tree,BT)指的是,任意节点的子树的高度差都小于等于1。常见的符合平衡树的有,B树(多路平衡搜索树)、AVL树(二叉平衡搜索树)等。平衡树可以完成集合的一系列操作,时间复杂度和空间复杂度相对于“2-3树”要低,在完成集合的一系列操作中始终保持平衡,为大型数据库的组织、索引提供了一条新的途径平衡二叉树类继承二叉树类二叉树类代码(GitHub):https://github.com/r

2021-03-10 17:22:04 598

原创 this指针:类继承问题 ‘xxxx‘ was not declared in this scope

this指针一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。this指针核心就是指向对象本身,学c++课的时候介绍了一个用法,当形参名称和类成员名称一样时,就可以使用this指针区分,如下所示c

2021-03-10 16:40:16 1103 3

原创 二叉搜索树(c++实现)

二叉搜索树二叉搜索树简而言之就是右子树值比根节点大,左子树值都比根节点小二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一

2021-03-10 16:24:41 286

原创 函数指针的作用:*visit函数

定义函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。int f(elementtype x); //声明函数int (*f1)(elemen

2021-03-10 16:08:18 9124 1

原创 二叉树的遍历(c++)

二叉树遍历二叉树存储结构二叉树类先序遍历中序遍历后序遍历层序遍历建立二叉树本篇文章使用c++描述普通二叉树的遍历操作代码详见:https://github.com/rebelsisyphus/vscode/blob/main/.vscode/data%20structure/Bintree/tree.h二叉树存储结构使用链式存储结构template <class T>struct BinTreeNode{ T data; int height; BinTree

2021-03-10 15:47:24 254

原创 #ifdef与#endif的作用

用法//list.h#ifdef LIST_H_#define LIST_H_class list{}//#else#endif解释常用于头文件中,防止.h文件中类被重复定义,因为在一个头文件A中常常引用另一个头文件B,在主程序中如果引用A.h,B.h, 那么B中的类会出现重复定义的情况,则会报错。很多时候我们并不清楚头文件之间的相互调用关系,为防止这种情况,就是用ifdef语句来使头文件仅被编译一次。这个语句相当于if语句,if(#define xxx){。。。。。},xxx是否被定义

2021-03-04 15:03:49 617 1

原创 友元:解决运算符重载参数顺序问题

友元:解决运算符重载顺序问题运算符重载代码举例:复数类的加号重载#include<iostream>#include<cmath>using namespace std;class complex{ private: int real,imag; public: complex(int r=0,int i=0):real(r),imag(i){} int realshow(){return real;} int imagsh

2021-02-27 15:28:38 1029

原创 线性表(c++描述)

线性表(c++描述)最近学了c++,把数据结构用c++再写一遍,加深一下对c++语法的理解学习c++本来是想利用他的库,节省一下写算法的时间,c语言这种面向过程语言对每个数据结构都要再写一遍,或者因为数据类型,再修改一遍,复用性有比较大的局限性。写了一点线性表的算法后,发现c++的多态性确实很好用,模板类可以很轻松的应用于多种数据类型,但是,对于简单的题目来说,代码有些繁琐,特别是对抽象类的继承,顺序表需要继承这个纯虚函数,但链表不需要,有时候就有点头疼。另外,吐槽下清华大学出版社的数据结构(c++)

2021-02-26 13:18:00 286

原创 析构函数的调用

析构函数的调用多个类变量的函数共用内存,变量单独存放在不同的内存空间中,析构函数会释放这些内存空间#include <iostream>#include <string.h>using namespace std;class person { private: int age; char name[10]; char sex; public: //不同类型的构造函数 person() { strcpy(nam

2021-02-10 17:22:07 2346

原创 将整数翻译成英文(C++)

将整数翻译成英文(C++)#include <iostream>#include <string.h>using namespace std;static char *num1[] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight",

2021-02-08 23:31:14 1062

原创 C++练习:时间类

C++练习:时间类#include <iostream>#include <time.h>using namespace std;class Date { private: //私有成员,只能在类内函数调用,外部不能直接调用 int year, month, day,hour; void setsystemdate(); public: //公有成员,主函数通过公有成员来对其私有成

2021-02-05 21:58:00 423

原创 函数参数的传递方式

函数参数的传递值传递变量为实参,将实参的值拷贝一份传递到函数中,具有各自的内存空间,函数对形参的修改不会影响实参void swap1(int x,int y){ int temp; temp=x; x=y; y=temp;}引用传递引用数据类型 &变量别名=变量名为变量起一个别名,二者共用内存空间但若不是作为函数参数或者返回值,需要提供初值int a;int &b=a;引用传递实参为变量,引用变量作为函数的形参,对形参的操作即是对

2021-02-05 16:36:18 179

原创 VS Code C/C++环境搭建

VS Code C/C++环境搭建安装vscode从官网下载,https://code.visualstudio.com/点击安装,照着步骤来即可,选择的全部勾上下载mingw64 官网:https://sourseforge.net/projects/mingw-w64/下载后,解压,将mingw64文件夹放在C盘下即可环境变量...

2020-12-26 21:23:56 169

原创 多项式乘法和加法

多项式乘法和加法指数递降输入与输出设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。#include <stdio.h>#include <stdlib.h>typedef s

2020-12-10 23:46:48 249

原创 A1001 A+B Format 数字相加格式化输出

A1001 A+B Format 数字相加格式化输出Calculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than four digits).Input Specification:Each input file contains one test case. Eac

2020-12-04 14:00:57 177

原创 Maximum Subsequence Sum

Maximum Subsequence Sum (25分)Given a sequence of K integers { N​1​​ , N​2​​ , …, N​K​​ }. A continuous subsequence is defined to be { N​i​​ , N​i+1​​ , …, N​j​​ } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has

2020-12-04 13:24:04 77

原创 最大子列和

最大子列和01-复杂度1 最大子列和问题 (20分)给定K个整数组成的序列{ N​1, N​2, …, NK},“连续子列”被定义为{ N​i, N​i+1, …, N​j},其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:数据1:与样

2020-12-03 23:36:56 106

原创 两个有序链表序列的合并

两个有序链表序列的合并本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:List Merge( List L1, List L2 );其中List结构定义如下:typedef struct Node PtrToNode;struct Node {ElementType Data; / 存储结点数据 /PtrToNode Next; / 指向下一个结点的指针 /};typedef PtrToNode List; / 定义单链表类型 */L1和

2020-12-03 15:51:28 1335

原创 队列简单操作集(C语言)

顺序存储typedef int Position;struct QNode { ElementType *Data; /* 存储元素的数组 */ Position Front, Rear; /* 队列的头、尾指针 */ int MaxSize; /* 队列最大容量 */};typedef struct QNode *Queue; Queue CreateQueue( int MaxSize ){ Queue Q = (Queue)m

2020-09-23 22:41:46 228

原创 堆栈简单操作集(c语言)

顺序存储ypedef int Position;struct SNode { ElementType *Data; /* 存储元素的数组 */ Position Top; /* 栈顶指针 */ int MaxSize; /* 堆栈最大容量 */};typedef struct SNode *Stack; Stack CreateStack( int MaxSize ){ Stack S = (Stack)malloc(sizeof(stru

2020-09-23 22:24:51 748

原创 线性表操作集(c语言)

线性表操作集顺序存储typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last;}; /* 初始化 */List MakeEmpty(){ List L; L = (List)malloc(sizeof(struct LNode)); L->Last = -1; return L;

2020-09-23 21:40:16 258

原创 邻接矩阵图的操作集

邻接矩阵图的操作集图的建立#include <stdio.h>#include <stdlib.h>#define weighttype int#define maxvertexnum 100typedef int vertex;//邻接矩阵操作//图struct Mgnode { int Nv,Ne; weighttype G[maxvertexnum][maxvertexnum];};typedef struct Mgnode *Mgraph;//边

2020-07-24 21:46:22 581

原创 连通集(浙大数据结构习题)

连通集(浙大数据结构习题)#include<stdio.h>#include <stdlib.h>#define maxsize 10#define false 0#define true 1typedef int vertex; //顶点下标typedef int weighttype;//图的邻接表建立//1.图的节点 边,邻接表节点 头结点指针数组 图 typedef struct edgenode *edge;struct edgenode

2020-06-18 17:25:36 901

原创 链式队列操作集

链式队列操作集typedef struct lnode *list;struct lnode { int data; list nextnode;};struct qnode { list front, gear; int Maxsize;};typedef struct qnode *qlist;建立空队列qlist makeq() { qlist q = (qlist)malloc(sizeof(struct qnode)); q->front = NULL; q

2020-06-18 17:12:20 171

原创 无头结点的链表顺序插入

无头结点的链表顺序插入按照大小顺序插入时需要记录插入位置前面一个节点的指针,因此使用两个指针对链表进行遍历,另外,用函数对无头链表进行插入等操作,要用一个指针来进行而且输入要使用指针的地址,否则返回之后找不到链表的头了typedef struct listnode *list;struct listnode{ int data; list next;};int insert(int n, list *q) { list temp = (list)malloc(sizeof(struct l

2020-06-18 16:50:23 1165

原创 # File Transfer

File Transfer正常思路struct setnode { int data; /*data好像没啥屁用还要来一遍遍历,赶紧滚吧*/ int parent;}set[maxsize];int findp(setnode s[], int x) { /*找到根结点*/ int i; for (i = 0; i < maxsize&&s[i].data != x; i++); //严重增加时间复杂度 if (i >= maxsize)

2020-06-09 20:09:37 163

原创 huffman树的建立

huffman树的建立Huffman树:所有结点带权路径长度之和最小的树将权重结点(left right设为null)输入堆的指针数组中,再排成最小堆,每次取出两个,建立新结点t,把两个最小结点挂在t上,再将t插入最小堆,每个结点合并一次,共需h->size次typedef struct treenode { int weight; huffmantree left; huffmantree right;}*huffmantree;typedef struct hfnode {

2020-06-07 18:36:13 326

原创 最大堆的顺序存储操作集

最大堆的顺序存储操作集typedef struct hnode { int *data; int size; int maxsize;}*heap;最大堆的根结点比所有子树节点都大空堆的建立#define maxdata 1000#define false 0#define true 1heap create(int N) { heap h = (heap)malloc(sizeof(struct hnode)); h->data = (int *)malloc(N *

2020-06-07 16:17:36 173

原创 二叉搜索树的操作(c语言实现)

二叉搜索树的操作(c语言实现)二叉搜索树(Binary Search Tree), 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。 typedef struct treenode *Bitree;st

2020-06-06 22:22:09 264

原创 平衡二叉树的插入调整(C语言)

平衡二叉树(C语言)平衡二叉树的插入与调整左右单旋左右单旋avltree Lrotation(avltree A) { /*左单旋*/ avltree B = A->left; A->left = B->right; B->right = A; A->height = getheight(A); B->height = getheight(B); return B;}avltree Rrotation(avltree A) { /*右单旋*/

2020-06-06 21:50:21 621

空空如也

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

TA关注的人

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