
c++
其实是相关数据结构知识使用C++语言;
ZhangJiQun&MXP
本人在读博士,研究大模型,数据交易,联邦学习领域
每天帮助你们总结前言论文以及个人遇到问题。
投稿Expert Systems with Applications历时4个月;中科院1区顶刊,本人在科研一线,在文章架构设计,公式编辑,图片美化,语言润色。overleaf编辑方面有一定经验,直接订阅后私信本人可以协助完成投稿返修。https://blog.youkuaiyun.com/qq_38998213/article/details/146232131?sharetype=blogdetail&sharerId=146232131&sharerefer=PC&sharesource=qq_3899821
展开
-
一、双亲存储结构 二、孩子链存储结构 三、孩子兄弟链存储结构 树的左孩子右兄弟存储实质:就是转化成二叉树的链式存储 树递归求叶子节点 递归求树的深度
目录树的存储的三种方式一、双亲存储结构二、孩子链存储结构三、孩子兄弟链存储结构二叉树一般是两种顺序存储和链式存储;树的存储的三种方式一、双亲存储结构typedef struct{ int data; int parent;}PTree[max_size];//P表示parent图像如下:二、孩子链存储结构typedef struct snode{ int data; node *ne...原创 2020-12-05 22:39:25 · 1015 阅读 · 0 评论 -
邻接矩阵,图的深度优先遍历 图邻接表,深度优先遍历 广度优先遍历 c++中Sort使用
深度优先遍历连通图从图中某个顶点v出发,访问v,并置visited[v]的值为true。 依次检查v 的所有邻接点w,如果visited[w]的值为false,再从w出发进行递归遍历,直至图中所有顶点都被访问过。bool visited[MVNum];//访问标志数组,其初值为falsevoid DFS(Graph G,int v){//从v个顶点出发递归地深度优先遍历图 ...原创 2018-10-15 17:46:34 · 666 阅读 · 0 评论 -
线性表结构体(“->”和“.”的区别); 树的结构体 前序遍历递归 递归实现求树的高度 图的邻接矩阵 图的邻接表 dfs判断顶点i 顶点 j是否可达 栈 队列 list:
总结几种结构体初始化的方法:struct Stu{intNum;boolSex;charName[20];char Email[100];}student,*studentlink使用:student.Nae="zhansan";studentlink->Name="zhangsan"栈(stack)的基本操作是s.push(int ...原创 2018-11-28 16:20:36 · 672 阅读 · 0 评论 -
顺序存储结构和链式存储结构的优缺点 存储密度 空间利用率 数据结构 数据结构简述: 1、数组 2、栈 3、队列 4、链表 5、树 6、散列表 7、堆 8、图
数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储...原创 2019-11-08 09:59:59 · 1264 阅读 · 0 评论 -
->和 .的区别 c++引用程序代码
#include <iostream>using namespace std;int main(){ int a=11; int &b=a; cout << &b << endl; cout << b << endl; return 0;}程序就是吧b的地址赋值...原创 2019-11-07 22:23:30 · 234 阅读 · 0 评论 -
错误:[Error] ld returned 1 exit status,resolve org.jetbrains.kotlin:failed to find Build Tools revisio
错误:[Error] ld returned 1 exit status原因:你上一次运行的dos黑框没有关闭; 关闭运行就好;原创 2020-04-16 11:35:07 · 1206 阅读 · 0 评论 -
循环链表建立
1.首先回忆一下之前链表的创建方式尾插法创建链表Node *CreateLinkListByTail(int n){ Node *p; //初始化链表的头结点 LinkList=new Node; //指针域为空 linkList->next=NULL; head=LinkList; for(auto i=0;i<n;i...原创 2018-12-22 22:57:02 · 2753 阅读 · 1 评论 -
C++ 指向类的指针
#include <iostream>using namespace std;class As{public: //定义一个类As,一般在C++中必须写public:,或者private:,默认是private的,那样的话,你的调用一般无效。 int aa=3330123; int dd(int a){ re...原创 2018-10-13 09:04:17 · 637 阅读 · 0 评论 -
C++ 多态: 虚函数: 纯虚函数:(java中抽象函数) C++纯虚函数相当于Java中的抽象函数区别:
C++多态:多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。虚函数:虚函数是在基类中使用关键字virtual声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。我们想要的是在程序中任意点可以根据所调用的对象类型来选...原创 2018-10-13 09:40:54 · 456 阅读 · 0 评论 -
C++运算符重载
【1】运算符重载的目的:实现类的多态性。【2】运算符重载的实质:函数重载,每个运算符对应各自的运算符函数,根据操作数的不同调用不同的同名函数。【3】运算符重载语法:运算符的重载是通过对运算符运算符函数名由关键字operate和重载的运算符组成:类型类名::operate 重载的运算符(参数列表){操作://……运算符处...原创 2018-11-08 15:47:45 · 569 阅读 · 0 评论 -
c++父类指针指向子类对象
c++父类指针指向子类对象 父类子类指针函数调用注意事项1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩)2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合生活习惯,在程序设计上也会给程序员带来困扰。(一般不会这么去定义)3,如果基础类和衍生类定义了相同名称...原创 2018-11-08 15:50:04 · 4970 阅读 · 0 评论 -
关于++运算,时刻注意数值的更新
#include <iostream>using namespace std;int main(){ int x=1; int y=2; int z=3; x+=y+=z; cout<<y<<endl; cout <<(x<y?y:x)<<endl; cout <&...原创 2018-11-08 19:55:52 · 254 阅读 · 0 评论 -
c++中的char类型简单分析
#include <iostream>using namespace std;int main(){ char aa='123';//直接定义char输出是最后一个字符,还有字符最后一个字符是“n/” char a='qd'; char f []="zxc"; //定义数组类型的char ,f[0]是第一个,从0开始 char *p=f;//指...原创 2018-11-08 19:59:18 · 790 阅读 · 0 评论 -
c++中switch的default问题1331,不同位置结果不同
首先明确一点default不同位置输出是不同的:例子;#include <iostream>using namespace std;int main(){ int a=1,b=2,c=3,d=4,y=10; switch(y){ case 1:a++;break; default:d=1; case...原创 2018-11-12 16:26:46 · 895 阅读 · 0 评论 -
数组下标赋值问题,a[i++] =1;//先a[i] i再加加
数组下标赋值问题。#include <iostream>using namespace std;const int MAX=20;int main(){ int i=0; int a[22]; a[i++] =1; //先a[i] i再加加 cout<<a[0]<<endl; cout<<a[1]...原创 2018-11-12 17:18:40 · 4965 阅读 · 0 评论 -
逗号表达式,以及加入:i++,++i
#include <iostream>using namespace std;int p(int k){ return k;}int main(){ int m; m= p((13,1,2)); cout <<m; return 0;}补充:p((13,1,2)) 逗号表达式只看最后一个;结果:2...原创 2018-11-12 17:33:42 · 1112 阅读 · 0 评论 -
精简易懂的快速排序,插入排序,大顶堆排序
#include <iostream>using namespace std; //快速排序,在子函数中,数组已被改变void quick_sort(int *a, int left, int right) //left和right为索引值{ int temp; //存储每次选定的基准数(从最左侧选基准数) int t; int initial=lef...原创 2018-11-28 21:55:07 · 334 阅读 · 1 评论 -
计算机原理中的位向量表示集合的原理是什么
如题,:a=[01101001]表示{0,3,5,6}b=[01010101]表示{0,2,4,6}最终a&b={01000001}={0,6} 以题目的例子来讲,a=[01101001],从右边数起,第0、3、5、6位是1,所以就表示了0、3、5、6这4个数,b的话同理,对应的是0、2、4、6这4个数。之后的并集就不用再说了吧。...原创 2018-11-29 16:14:07 · 5713 阅读 · 2 评论 -
快速排序
#include <iostream>using namespace std; //快速排序,在子函数中,数组已被改变void quick_sort(int *a, int left, int right) //left和right为索引值{ int temp; //存储每次选定的基准数(从最左侧选基准数) int t; int initial=lef...原创 2018-11-28 18:02:35 · 194 阅读 · 0 评论 -
排序算法第n趟总结 排序算法时间空间复杂度 各种排序算法额外空间
总结排序:认准1.数组规模。2.数组是否基本有序3.是否要求稳定记住:冒泡以及归并是稳定的。 快排不稳定,基本就能解决问题(1)若n较小(如n≤50),可采用直接插入或直接选择排序。 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或...原创 2018-11-28 20:04:50 · 868 阅读 · 0 评论 -
递归和while区别 递归算法三步 递归应用 递归杨辉三角 求树的深度 递归求叶子节点总数 链表逆置 二叉树叶子节点到根节点路径 比较两个二叉树是否相同
递归:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。然后,你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答出你到底用这你把钥匙打开了几扇门。循环:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现...原创 2018-11-28 20:09:24 · 316 阅读 · 0 评论 -
折半查找的实现代码:
递归实现:#include <iostream>// 二分法:递归int searchBin(int arr[], int x, int low, int high) { int mid; if(low > high) return -1; mid = (low + high) / 2; if(x == arr[mid]) return mid; ...原创 2018-12-13 11:46:31 · 6417 阅读 · 0 评论 -
const,volatile,restrict,define,static 存储类,简单理解
const const类型的对象在程序执行期间不能被修改改变。 volatile 修饰符volatile告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存中读取变量。对于一般的变量编译器会对变量进行优化,将内存中的变量值放在寄存器中以加快读写效率。 restrict 由restrict修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 ...原创 2019-07-23 16:27:32 · 288 阅读 · 1 评论 -
struct 指向结构的指针,typedef 关键字,C++ 中的运算符重载,虚函数和纯虚函数,C++ 接口,#和##运算,c++线程
指向结构的指针指针的优点a.为函数提供修改调用变元的灵活手段;b.支持C 动态分配子程序c.可以改善某些子程序的效率>>在数据传递时,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际数据,即提高传输速度,又节省大量内存。d.为动态数据结构(如二叉树、链表)提供支持您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似...原创 2019-07-24 09:59:40 · 437 阅读 · 0 评论 -
C++基础代码—20余种数据结构和算法的实现
做了个表,看一下这个工具集里都有哪些C++类 基本上可以分为两大类,一种是关于数据结构和算法的(例如:RBtree,stack),另一种是关于C++语言本身层面的(例如:reference_count,Uncopyable)。这些类,可以在如今C++标准库或者其它C++库(如:boost)中找到类似的实现,实现它们的目的不是想自己造轮子,而是通过实现,来深入的理解到一些更本质的东...原创 2019-08-23 16:52:00 · 399 阅读 · 0 评论 -
c++中数据抽象与数据封装的区别
封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP 概念,即数据隐藏。数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。封装是:函数与数据在一起进行封装。抽象是:仅仅将接口暴露,细节隐藏;根据我现在的理解,其实差距不...原创 2018-10-13 09:58:44 · 3559 阅读 · 0 评论 -
C++ 构造函数初始化调用顺序及类函数内部嵌套函数情况
C++构造函数初始化顺序C++构造函数按下列顺序被调用:(1、2、3、4是按照优先级顺序来的!)(1)任何虚拟基类的构造函数按照它们被继承的顺序构造;(2)任何非虚拟基类的构造函数按照它们被继承的顺序构造;(3)任何成员对象的构造函数按照它们声明的顺序调用;(如果成员对象有前面出现过的父类,那么还会调用此对象父类的构造函数一遍,因为第一遍(1)(2)是为了创建子类,第二遍调用是为了构造里...原创 2018-11-08 14:31:19 · 941 阅读 · 0 评论 -
C语言的printf输出格式控制
1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法] %g(%G) 浮点数不显无意义的零"0" %i 有符号十进制整数(与...原创 2018-11-08 14:27:24 · 298 阅读 · 0 评论 -
简单理解数组指针和指针数组
inta[3][4]这个无需多说,就是一个二维数组。int(*p)[4]就相当于intp[][4],它就是一个二维数组的指针,可以指向一个第二维度为4的二维数组。而a就是这样的数组,因而下面是合法的。p=a;int *p[3]是指针数组。说白了,就是定义了三个指针,分别为p[0],p[1],p[2]。可以将他们单独拿来使用。int a1,a2,a3;p[0]=&a1;p[1...原创 2018-10-30 12:27:31 · 438 阅读 · 0 评论 -
setw()函数使用,#include <iomanip> ——using std::setw;
使用时声明:#include <iostream>using namespace std; #include <iomanip>using std::setw; cout<<'s'<<setw(8)<<'a'<<endl;则在屏幕显示s a //s与a之间有7个空格, 上代码:#i...原创 2018-10-30 12:07:51 · 3231 阅读 · 0 评论 -
C++中,float double区别
在VC++6.0平台,一定记住float:有效数字位数7位。double:有效数字位数7位。小数的时候小数点占一位; 类型 比特数 有效数字 数值范围 float 32 6-7 ...原创 2018-10-30 11:50:06 · 1513 阅读 · 0 评论 -
C++ 数学运算, <cmath>
C++ 数学运算在 C++ 中,除了可以创建各种函数,还包含了各种有用的函数供您使用。这些函数写在标准 C 和 C++ 库中,叫做内置函数。您可以在程序中引用这些函数。C++ 内置了丰富的数学函数,可对各种数字进行运算。下表列出了 C++ 中一些有用的内置的数学函数。为了利用这些函数,您需要引用数学头文件 <cmath>。序号 函数 & 描述 1 ...原创 2018-10-30 11:33:08 · 3059 阅读 · 0 评论 -
Dev C++的下载安装
1. Dev-C++ 的下载地址:http://sourceforge.net/projects/orwelldevcpp/?source=directory2.下载完成后,就像安装其他软件一样,点击安装包,出现如下图,语言先默认选择English,初次安装完成后会选择中文简体的选项设置。点ok!3.点I agree4.接下来,默认点击next,下一步。5.选择安装路径,之后点击i...原创 2018-10-09 21:33:06 · 8412 阅读 · 0 评论 -
C++ 数据抽象,C++ 数据封装
C++ 数据抽象:数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。数据抽象是一种依赖于接口和实现分离的编程(设计)技术。让我们举一个现实生活中的真实例子,比如一台电视机,您可以打开和关闭、切换频道、调整音量、添加外部组件(如喇叭、录像机、DVD 播放器),但是您不知道它的内部实现细节,也就是说,您并不知道它是如何通过缆线接收信号,如何转换信号...原创 2018-10-13 09:46:40 · 406 阅读 · 0 评论 -
c++中this指针的使用,其实就是指类本身
#include <iostream>using namespace std;class Aa { public: int a,s; void fuzhi(int r,int t){ this ->a=r;//使用a=r,可以达到同样 的效果 this ->s=t;//使用s=t,可以达到同样 的效果 ...原创 2018-10-13 00:55:58 · 555 阅读 · 0 评论 -
友元函数,内联函数
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字friend,代码...原创 2018-10-13 00:25:52 · 1217 阅读 · 0 评论 -
c++中对象与结构体的区别,C++的继承,构造方法,析构函数
#include<iostream>using namespace std;class Base { public: Base() { cout<<"Base Creted"<<endl; } ~Base() { cout<<"Base D...原创 2018-10-12 15:43:50 · 577 阅读 · 0 评论 -
字符指针和整形指针简单分析,*,&的作用。
你始终记住 * 就是取值的,例:*p,你看看p中存的是什么是地址的话就是去这个地址中存的内容,如不是抵制就返回0;代码如下: string ww="zhj";string * dizhi=&ww;//存的地址cout <<dizhi<<endl;//取出地址cout <<*dizhi<<endl...原创 2018-10-12 12:59:58 · 1808 阅读 · 0 评论 -
有关指针的基础知识(指针定义和使用) 详解二维数组与指针、指针数组、数组指针
int* p=a[0];//此时P是指向一维数组的指针。P++后,p指向 a[0][1]。int (*p1)[n];p1=a;p1++后,p1指向a[1][0]; int *p=a[0];则数组a的元素a[1][2]对应的指针为:p+1*4+2元素a[1][2]也就可以表示为:*( p+1*4+2)用下标表示法,a[1][2]表示为:p[1*4+2]特别说明:对上述二维数组a,...原创 2018-10-30 14:21:41 · 2603 阅读 · 0 评论 -
*++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
intarr[5]={1,3,5,7,9};int*p=arr;*++p:p先自+,然后*p,最终为3++*p:先*p,即arr[0]=1,然后再++,最终为2*p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1](*p)++:先*p,即arr[0]=1,然后1++,该语句执行完毕后arr[0] =2*(p++):效果等同于*p++...原创 2018-11-09 17:03:26 · 369 阅读 · 0 评论