自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 chapter1+chapter 2

chapter 1数据类型原子类型(int,string…)结构类型(struct)抽象数据类型(class,可以封装操作)存储结构顺序存储链式存储索引存储散列存储逻辑结构分为线性和非线性结构。线性包括线性表,栈,队列,串等、非线性包括树形和图和集合。算法复杂度排序书P6chapter 2顺序表顺序表的查找,插入,删除等操作的平均操作次数计算法链表单链表构建法之头插法和尾插法(P28)单链表判空条件:head->next==null;循环单链表判空

2021-10-27 18:23:12 112 1

原创 chapter 6-4图的应用

相关算法的实现Prim,Kruskal,Dijkstra,Floyd相关算法要点Prim和Kruskal属于最小生成树算法;Dijkstra属于单源最短路算法;Floyld属于各顶点间最短路算法Prim适用于边稠密图,因为其时间复杂度与边无关,算法实现只遍历点。时间复杂度为O(v^2)Kruskal适用于边稀疏而点较多的图,因为其算法实现主要靠遍历边;边一般按从小到大用堆存放,因此取边复杂度为O(logE),此外遍历每条边并使用并查集评估,总的时间复杂度O(ElogE).Dijkstra时间复

2021-09-29 10:54:49 93

原创 chaper 6-3 图的遍历

BFS广度优先使用辅助队列完成遍历。图的广度优先搜索与二叉树的层序遍历顺序一致。注意若为邻接矩阵存储的图,由于邻接矩阵的唯一性,根据BFS生成的生成树也唯一;而邻接表的存储表示不唯一(主要看存入边的顺序),因此其生成树不唯一。BFS的邻接矩阵实现:图算法BFS的邻接表实现: struct Enode { int data; Enode* next; int weight;//边权}; Enode enodelist[20];bool vis[200] = { false };

2021-09-27 13:56:18 125

原创 指针开辟二维数组

char **a; a = new char * [rowsNum]; for (int i = 0; i < rowsNum; i++) { a[i] = new char [columnsNum]; for (int j = 0; j < columnsNum; j++) { a[i][j] = j; printf("%d ", a[i][j]); } printf("\n"); } for (int i = 0; i < .

2021-09-26 13:42:02 162

原创 chapter 5-5 树与二叉树的应用

二叉排序树查找二叉排序树比当前结点小则走向该节点的左孩子,比当前结点大则走向右孩子。不断向下走直至找到目标结点或者走到空即为未命中。二叉排序树的插入包含排序树的查找过程。先将待插入数字作为查找目标开始查找;若在树内命中说明已经存在无需再插入;若未命中,则最后查找到达的空树处即为应该插入的位置。二叉排序树的删除一个递归的过程。若待删除结点为叶节点,直接删除。若待删除结点有左右孩子,将其值改为其直接后继的值。则待删除结点变为其直接后继结点。(若无右孩子则改为直接前驱,若左右孩子都有或只有右孩

2021-09-25 12:37:44 62

原创 chapter 5-4 树与森林

树的表示法双亲表示法-1表示根节点。孩子表示法孩子兄弟表示法注意,此种表示法是将树和森林转化为二叉树的写法。即对于每个结点,其lc为它的第一个孩子,rc代表的子树为它的兄弟结点。树,森林与二叉树转换见书P162.关于遍历问题:树的先根遍历即先访问根结点,再访问树的子节点(从左往右),对于每一颗子树也如此。树的先根遍历序列,与将其转化为二叉树之后的先序序列相同。树的后根遍历即先从最左结点开始,从左往右访问子节点,最后访问根节点。树的后根遍历序列,与将其转化为二

2021-09-23 11:51:35 128

原创 chapter 5-3 二叉树遍历与线索二叉树

chapter 5 树与二叉树二叉树遍历方法二叉树遍历方法线索二叉树三种遍历顺序的构建方法大致相同,先序遍历构建时需要注意细节。线索二叉树的数据单元:struct ThreadTree { int data; ThreadTree* lc; ThreadTree* rc; int ltag, rtag;//0表示有子节点,1表示为前驱或者后继线索};先序构造线索二叉树注意先序构造时需要防止线索化后的节点干扰遍历流程//前序线索化void visitPre(ThreadTr

2021-09-19 11:58:25 77

原创 二叉树遍历及bst

二叉树名词满二叉树树的每一层的节点个数都达到了当层最大。完全二叉树任何一个编号为x的节点,其左孩子编号一定为2x,右孩子一定为2x+1.二叉树遍历二叉树三种遍历顺序前序:中-左-右中序:左-中-右后序:左-右-中二叉树的递归遍历以前序为例:void front(node root){ print(root->num); front(root->lc); front(root->rc);}二叉树的非递归遍历1)前序:用辅助栈,root入栈

2020-11-14 10:56:09 123

原创 图算法

存储图可用邻接矩阵和邻接表存储,当图中点个数不超过1000时都可用邻接矩阵。遍历图dfs直接递归int G[max][max];//邻接矩阵int n;//顶点bool vis[max]={false};void dfs(int a){ vis[a]=true; for(int i=0;i<n;i++){ if(G[a][i]!=inf&&vis[i]==false){ dfs(i); }; };}void set_dfs(){ for(

2020-11-13 19:54:09 129

原创 数学问题

最大公约数求解a与b的最大公约数:1)a%b2)a = b,b = a%b3)重复直至b==0,则a为最大公约数int gcd(int a,int b){ if(b==0)return a; return gcd(b,a%b);}最小公倍数求解a与b最小公倍数,先求出a与b的最大公约数。设c为a,b最大公约数,则最小公倍数=ab/c.由于ab在计算中可能溢出,因此应写成a/cb int lcm(int a,int b){ int c=gcd(a,b); return (

2020-11-06 22:02:30 282

原创 关于堆的构建和调整

堆的定义(以小顶堆为例):给定一个初始序列,在此基础上建堆。每个序列号(从1开始)为i的节点左孩子为2i,右孩子为2i+1.小顶堆即为每个以当前节点为根节点的子树中,最小的值总是根节点的值。因此根据迭代思想,当前节点的值(设为a),与左右两子树相比较,使最小的节点值(设为b)成为根节点,即可保证在当前子树中最小的值一定是根节点。因此堆的整体调整是由下向上的过程。当节点a经过调整位置下沉后,需要进行后续调整直至找到合适的位置或者抵达序列边界为止。因此单个节点的调整是由上而下的过程。代码模板: int

2020-10-20 15:57:18 1485

原创 求绝对值

1,int abs(int i) 返回整型参数i的绝对值2,double cabs(struct complex znum) 返回复数daoznum的绝对值3,double fabs(double x) 返回双精度参数x的绝对值4,long labs(long n) 返回长整型参数n的绝对值

2020-10-19 19:27:40 215

原创 并查集

并查集的模板都大致相同,做了一题并查集就顺便总结一下学到的东西。代码://记录父节点的数组初始化void resum(int n) { for (int i = 0; i < n; i++) { fcode[i] = i; };}//查询根节点顺便做路径压缩int findf(int a) { int f = a; while (f != fcode[f]) { f = fcode[f]; }; //压缩路径 while (fcode[a] != f) { int

2020-10-18 16:37:31 64

原创 L2-013 红色警报

战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信息,即一

2020-10-17 20:37:53 119

原创 力扣1367.二叉树中的列表

题目:给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表。如果在二叉树中,存在一条一直向下的路径,且每个点的数值恰好一一对应以 head 为首的链表中每个节点的值,那么请你返回 True ,否则返回 False 。一直向下的路径的意思是:从树中某个节点开始,一直连续向下的路径。示例 1:输入:head = [4,2,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]输出:true解释:树中蓝

2020-10-07 21:45:42 149

原创 python打印数组元素

建立数组a,初始化a为[[1, 2], [3, 4], [5, 6]],输出 (0,0)(1,1)(2,0)这三个元素(提示: 使用 print(a[[0, 1, 2], [0, 1, 0]]) ) a = np.array([[1, 2], [3, 4], [5, 6]])print(a[[0, 1, 2], [0, 1, 0]])

2020-10-05 17:06:24 1770

原创 L2-009 抢红包 (25分)

注意比较函数的写法bool cmp(node a, node b) { if(a.total != b.total) return a.total > b.total; else if(a.getnum != b.getnum) return a.getnum > b.getnum; else return a.id < b.id;}

2020-09-24 16:20:36 87

转载 c++控制格式输出相关

I/O流常用控制符:使用控制符时,在程序开头加投文件#include <iomanip> C++有两种方法控制格式输出:1、用格式控制符;2、用流对象的成员函数 格式控制符:dec 设置基数为10hex 设置基数为16oct 设置基数为8setfill(c)...

2020-07-15 20:58:20 159

原创 vector定义变长二维数组

#include<vector>using namespace std;vector<vector<int>>a;int b = [1,2,3,4,5,6];for(int i=0;i<2;i++) for(int j=0;j<3;j++) //添加一维数组 if(i>=a.size())a.push_back(vector<int> {}); a[i].push_back(b[i][j]);...

2020-07-13 15:58:18 515

原创 二叉树最小深度

class Solution {public: int minDepth(TreeNode* root) { if(root == NULL){ return 0; }; if(root->left == NULL && root->right != NULL){ return 1+minDepth(root->right); }else if(root

2020-07-13 13:14:27 89

原创 二叉树最大深度问题

class Solution {public: int maxDepth(TreeNode* root) { if(root==NULL){ return 0; }; return max(maxDepth(root->left),maxDepth(root->right))+1; }}递归返回二叉树最大深度

2020-07-13 12:55:14 96

转载 二叉树后序遍历思路

1,要保证根结点在左孩子和右孩子访问之后才能访问,因此对于任一结点P,先将其入栈。如果P不存在左孩子和右孩子,则可以直接访问它;或者P存 在左孩子或者右孩子,但是其左孩子和右孩子都已被访问过了,则同样可以直接访问该结点。若非上述两种情况,则将P的右孩子和左孩子依次入栈,这样就保证了 每次取栈顶元素的时候,左孩子在右孩子前面被访问,左孩子和右孩子都在根结点前面被访问。2,利用pre记录上一个访问过的结点,与当前结点比较,如果是当前结点的子节点,说明其左右结点均已访问,将当前结点出栈,更新pre记录的对象。

2020-07-12 20:50:17 243

空空如也

空空如也

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

TA关注的人

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