
C++
文章平均质量分 62
rliu2002
这个作者很懒,什么都没留下…
展开
-
【C++】输入输出及格式控制
总结了几种输入输出和格式控制方法原创 2023-08-31 20:20:22 · 776 阅读 · 0 评论 -
【数据结构】 排序算法
对几类排序算法简要概括所有排序最终目标均为得到升序序列!原创 2021-12-20 18:39:40 · 528 阅读 · 2 评论 -
【数据结构】堆排序
学习心得原创 2021-12-20 17:56:55 · 670 阅读 · 0 评论 -
C++中的swap函数
IntroductionSwapping is a simple operation in C++ which basically is the exchange of data or values among two variables of any data type. Considering both the variables are of the same data type.The function and its workingThe swap() function in C++, fr翻译 2021-12-20 17:14:27 · 4350 阅读 · 0 评论 -
【数据结构】浅谈二叉排序树
二叉排序树可以对一组数据进行查找、插入、删除操作。简介二叉排序树要么是空二叉树,要么具有如下特点:如果其根结点有左子树,那么左子树上所有结点的值都小于根结点的值;如果其根结点有右子树,那么右子树上所有结点的值都大小根结点的值;二叉排序树的左右子树也要求都是二叉排序树。简言之,二叉排序树的左子树、根节点、右子树中的数据依次递增!1.左子树的数据比根结点数据小2.右子树的数据比根结点数据大实现过程使用C++面向对象实现,使用二叉树的存储结构结构体声明struct BiNode{ int原创 2021-12-01 15:10:59 · 2773 阅读 · 0 评论 -
【数据结构】浅谈图常用的两种存储结构
写程序时,需要一定的结构存储图,本文将介绍两种图常用的存储结构:邻接矩阵和邻接表。邻接矩阵邻接矩阵是通过二维数组对图中边的信息(包括边依附的两个顶点以及边的权值)进行存储。邻接矩阵数组的大小取决于图中顶点的数量。准备工作使用邻接矩阵前,需要开一个一维数组数组,以存储各个顶点的数据(数组的编号与邻接矩阵中顶点的编号一一对应)构造函数邻接矩阵建图的构造函数要完成的三件事:1.存储图的基本信息(顶点数、边数)2.存顶点3.存边(构造邻接矩阵)MGraph(DateType a[],int原创 2021-11-24 11:38:21 · 2702 阅读 · 0 评论 -
【数据结构】拓朴排序
基本知识AOV网络AOV网(activity on vertex network)本质上是有向图,表示一个有一定规模的“工程”。图中的顶点表示工程中的不同活动,图中的边表示各项活动之间的先后顺序关系(制约关系)。拓扑序列有向图G=(V,E)具有 n 个顶点,从顶点 vi到 vj 有一条路径,顶点序列 v0, v1, …, vn-1中顶点 vi 必在顶点 vj 之前,此时的顶点序列 v0, v1, …, vn-1 称为一个拓扑序列。显然,这个序列可以让网中所有存在的前驱和后继关系都能得到满足!显然,原创 2021-11-23 17:16:36 · 1173 阅读 · 0 评论 -
【数据结构】最短路径问题之Floyd算法
解决最短路径问题,常用到两个算法:Dijkstra(迪杰斯特拉)算法和 Floyd(弗洛伊德)算法。本文将简要介绍我对弗洛伊德算法的理解。Floyd算法该算法用于解决任意顶点之间的最短路径问题。如果要让任意两点(例如从顶点a点到顶点b)之间的路程变短,只能引入第三个点(顶点k),并通过这个顶点k中转即a->k->b,才可能缩短原来从顶点a点到顶点b的路程。因此,该算法的基本思路就是加点并比较所求两点直达路径与加点后中转路径的长度,取最短的作为最终结果!显然,*在加点过程中,每个顶原创 2021-11-21 17:31:44 · 1653 阅读 · 1 评论 -
【数据结构】最短路径问题之Dijkstra算法
Dijkstra算法是求解图中单源点最短路径的一种算法,其实现过程类似于Prim算法。顾名思义,“单源点最短路”说明实现功能需要指定源点,并且该算法仅支持各边权值为正数的情况!基本知识路径第一个点称“源点”,最后一个点称”终点“。最短路径指的是两个顶点间经历边数最少的路径。基本思路将顶点集合V分成两个集合,一类是生长点的集合S(包括源点和已经确定最短路径的顶点);另一类是非生长点的集合 V-S(包括所有尚未确定最短路径的顶点),并使用一个待定路径表,存储当前从源点V到每个非生长点的最短路径。存储原创 2021-11-21 13:38:36 · 1269 阅读 · 2 评论 -
【数据结构】最小生成树之Kruskal算法
Kruskal算法可以形象地称为“加边法”,也就是说,该算法通过处理边,最终得到最小生成树。存储结构边集数组:由两个一维数组构成。一个是存储顶点的信息;另一个是存储边的信息。边数组的实现用到结构体!边数组每个数据元素由一条边的起点下(begin)、终点下标(end)和权(weight)组成。struct Edge{int begin, end, weight;};顶点数组使用普通一维数组基本思想图中每个顶点各自构成一个连通分量,然后按照边的权值由小到大的顺序.依次考察边集E中的各原创 2021-11-19 20:00:21 · 3407 阅读 · 1 评论 -
【数据结构】最小生成树Prim算法
概况最小生成树是是原图的极小连通子图,是最小权重生成树的简称。其特点是:图中包含原图中的所有 n 个结点,并且有保持图连通的最少的边。求最小生成树有两种算法,分别是:Kruskal(克鲁斯卡尔)算法、Prim(普里姆)算法。本文将介绍笔者对Prim算法的理解。Kruskal算法将在后续文章介绍。Prim算法该算法需要用邻接矩阵存储图(使用edge数组记录边的权值,vertex数组存储顶点数据)。class MGraph{public: MGraph(DataType a[ ], in原创 2021-11-19 17:06:32 · 2625 阅读 · 0 评论 -
【数据结构】并查集
概况并查集主要用于解决一些元素分组的问题。其操作的对象是集合(通过结构数组存储集合中每个元素的信息,包括:数据及归属集合)。它管理一系列不相交的集合,顾名思义,并查集的功能是对集合中的元素进行查找和合并:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。集合元素的存储结构集合中每个元素的数据由两部分构成,结构体声明为:struct Elem{ char data; //集合存储字符型数据 int par原创 2021-11-17 17:51:33 · 214 阅读 · 2 评论 -
【数据结构】 图的邻接表
邻接表是图的另一种存储结构(使用链表的思想)。该方式的基本思路:顶点表后指向邻接表,邻接表中依次为当前顶点的邻接点准备工作与邻接矩阵类似,在构造邻接表之前,需要存储各个顶点的信息,在这里使用结构体存储。因此,在构造邻接表之前,需要先定义两个结构体:邻接表结构体、顶点结构体。【其中,都需要用到指向邻接表的指针!】struct EdgeNode{ //邻接表 int ad; //记录邻接点的位置 EdgeNode *next; //指向邻接表的指针};struct VertxNod原创 2021-11-12 17:17:08 · 4765 阅读 · 0 评论 -
【数据结构】 图的邻接矩阵
在图的存储方法中,邻接矩阵通过数组对图的信息进行存储。基本思路使用邻接矩阵前,需要开一个一维数组数组,以存储各个顶点的数据(数组的编号与邻接矩阵中顶点的编号一一对应);同时,还需要一个标记顶点是否被访问的一维数组,用来表示图中顶点是否被访问。【其中,标记顶点是否被访问的数组使用全局变量】邻接矩阵为n*n方阵(二维数组),用来表示图中顶点间的连通关系(两顶点连通,数组值为1;两顶点不连通,数组值为0)。因此邻接矩阵edge数组的大小取决于图中顶点的数量。邻接矩阵构造前,需要对标记数组、邻接矩阵edge原创 2021-11-12 16:53:39 · 5478 阅读 · 0 评论 -
浅谈DFS与BFS
深度优先DFSDFS的执行类似于二叉树的前序遍历,从指定位置开始,对图中顶点纵向访问,该过程的实现使用递归。基本思路算法过程:从某顶点出发,访问起点(标记访问并进行相关操作),之后通过递归完成对该点未被访问的邻接点的遍历,直到图中所有顶点均被访问过为止。代码实现以邻接矩阵的遍历为例,对图进行dfs(在本例中,相关操作为输出图中顶点的数据)其中edge为邻接矩阵,vis为标记访问数组。void MGraph::dfs(int v){ cout<<vertx[v];vis[v]=1;原创 2021-11-11 22:00:58 · 262 阅读 · 0 评论 -
浅谈BF算法的C++实现
算法介绍主串和子串从头开始,逐位比较。若相等,比较后面的;若不相等,回溯(主串从第二位置,子串从头开始比较),直到将字符串都比较完。匹配成功返回开始子串第一字符逻辑上在主串中的位置,否则返回0。代码实现BF算法使用面向结构的思想即可。算法函数int BF(char s[],char t[]){ int start=0; //start记录开始比较的位置,从主串头开始 int i=0,j=0; //i,j分别为主串、子串循环变量 while((s[i]!='\0'原创 2021-11-10 18:09:42 · 1702 阅读 · 0 评论 -
【数据结构】二叉树的C++实现
结构体——存储结点信息struct BiNode{ char data; BiNode *lchild; BiNode *rchild;};类的声明class Bitree{public: Bitree(){root=creat(root);} ~Bitree(){Release(root);} void Preorder(){Preorder(root);} void inorder(){inorder(root);} void原创 2021-11-10 17:45:58 · 1267 阅读 · 0 评论 -
【数据结构】哈夫曼树的C++面向对象实现
“哈夫曼树”介绍给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)特点哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近相关术语1.路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-12.结点的权及带权路径长度若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结原创 2021-11-10 17:18:37 · 1132 阅读 · 0 评论 -
【数据结构】浅谈C++实现队列
队尾添加,队首删除(排队,先到先出)循环队列基本思路数组+指针实现,需要指定队列长度。前期准备:1.需要两个指针:队首(front)、队尾(rear)指针front永远指向队头元素前一位置,front之后才是第一结点2.循环链接首尾队列长度:Qsize(rear+1)%Qsize==front3.通过C++类实现功能封装class CirQueue{ public: CirQueue(); ~CirQueue(); void add(int x); //入队原创 2021-10-24 22:59:09 · 696 阅读 · 0 评论 -
【数据结构】浅谈C++栈
栈是只能在一端进行插入删除的线性表,操作只能在一端(栈顶)完成。栈内元素的出入顺序为先进后出.以下为两种栈的存储结构:顺序栈基本思想1.使用C++类实现功能的封装2.存储通过顺序栈数组实现,下标小的为栈底,下标大的为栈顶。存储栈的数组长度为Size.栈满时top指向Size-1,栈空时top为-1.注意:1.入栈时考虑栈满2.出栈时考虑栈空3.由于顺序存储,空间静态分配,无需手动写析构函数销毁空间实现前期准备——类的声明class Seq{ public: Seq();原创 2021-10-24 19:47:37 · 1647 阅读 · 0 评论 -
浅谈C++单链表的基本操作
本文是我的个人总结,如有不当之处还请大家批评指正。构造头插1.使用first及辅助指针s2.s存储数据,first对s挂链尾插1.使用两个指针 建立尾指针r(初始值指向first),辅助指针s(初始值置空)2.s存储数据3.r挂链(r下一节点指向s,r指向s)遍历1.建立工作指针p (初始值指向第一结点)2.p非空时输出查找按值查找,返回元素所在的位置一)需要工作指针p(初始值为第一结点),计数器,标记变量二)查找过程通过while循环实现(p非空):1.计数器递增2.i原创 2021-10-24 00:10:51 · 196 阅读 · 0 评论 -
【数据结构】浅谈单链表的C++实现
链表为线性表的存储结构之一,相比于数组(顺序表),链表在插入、删除操作简便。基本知识头结点前放置first指针,始终指向第一个节点前的位置。初始化链表将first指针后结点置空(此状态也是空链表的条件,可以用于判空表)注:指针的数据类型为无符号长整型,空指针的数值为0构建链表操作分两种:头插法(插入到表头)、尾插法(插入到表尾)【需要用到临时指针s,先赋值,后对s挂链】头插法 int i; for(i=0;i<n;i++){ Node *s=NULL; s=new No原创 2021-10-09 22:57:21 · 209 阅读 · 0 评论 -
浅谈C++运算符重载
浅谈C++运算符重载一、友元函数重载当一元运算符的操作数,或者二元运算符的左操作数是类的对象时,定义重载算符函数为成员函数。注意:= () [] → 不能用友元重载!友元函数重载运算符常用于运算符的左右操作数类型不同的情况class Complex{ int Real ; int Imag ; public : Complex ( int a ) { Real = a ; Imag = 0 ; } Complex (原创 2021-07-01 07:32:52 · 645 阅读 · 0 评论 -
浅谈C++多态
浅谈C++多态动态、静态联编静态联编静态联编是程序的匹配、连接在编译阶段实现,也称为早期匹配。比如,重载函数使用静态联编。普通成员函数重载可表达为两种形式:在一个类说明中重载基类的成员函数在派生类重载。有 3 种编译区分方法:(1)根据参数的特征加以区分(2)使用“ :: ”加以区分(3)根据类对象加以区分类指针的关系1.基类指针可以获取派生类对象地址,却只能访问派生类从基类继承的成员!使用基类指针引用派生类对象会调用从基类继承的成员函数,若派生类中有函数和基类中重名,则原创 2021-06-30 21:51:35 · 169 阅读 · 0 评论 -
浅谈C++类与对象
浅谈C++类和对象一、内联函数1.在类内部写函数体 (隐式)2.写关键字inline (显式)二、构造、析构函数对象的创建与初始化、对象生命期结束时的清理工作,分别由构造函数和析构函数完成。(一)构造构造函数的功能、特点1.在定义对象时由系统自动调用来创建对象并初始化对象。2.构造函数通常是对成员变量进行初始化3.构造函数的函数名与类名相同。构造函数初始化成员有两种方法A.使用构造函数的函数体进行初始化B.使用构造函数的初始化列表进行初始化初始化列表形式:funname(参数原创 2021-06-30 21:48:29 · 156 阅读 · 0 评论