数据结构与算法
文章平均质量分 65
行仔ovo
这个作者很懒,什么都没留下…
展开
-
【基础算法】- 算术表达式计算方法
文章目录0. 表达式树1. 后缀表达式计算2. 中缀表达式计算法2:0. 表达式树1. 后缀表达式计算后缀表达式:也叫逆波兰表达式,是表达式树的后序遍历。在计算时,不用还原出整棵树,可用一个栈来辅助计算。leetcode 150. 逆波兰表达式求值class Solution {public: int evalRPN(vector<string>& tokens) { int st[10005]; int tt = 0;原创 2022-05-02 10:50:55 · 1399 阅读 · 0 评论 -
【排序算法】 - 常见排序算法及稳定性
文章目录1. 代码2. 稳定性1. 代码/* * @Brief: 常见排序算法汇总 * @Author: * @Date: 2021-07-01 */#include <iostream>#include <algorithm>#include <vector>#include <queue>using namespace std;void printArray(int *a, int len){ for(int i =原创 2021-12-20 20:04:26 · 216 阅读 · 0 评论 -
数据结构与算法(8) - bitmap
文章目录c++ code:#include <iostream>#include <cstring>using namespace std;class bitmap{public: bitmap(int _ss){ ss = _ss; // 要存的总数 int_ss = ss / 32 + 1; ptr = new unsigned int[int_ss]; memset(ptr, 0,原创 2021-09-19 15:49:51 · 204 阅读 · 0 评论 -
【二叉树】对称二叉树(3种方法:递归、迭代、BFS)
题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3思路判断二叉树是否对称,下边两种方法都可以判断:法1:假设从根节点(root)开始判断的话,假设他的左右两个孩子为n1和n2,也就是要判断两棵以节点n1、原创 2020-05-21 17:53:17 · 640 阅读 · 0 评论 -
【算法学习】扩展欧几里得算法详解及C++代码实现
0. 欧几里得算法欧几里得算法用于求解两个数的最大公约数。代码如下:int gcd(int a, int b){ if(b == 0) return a; return gcd(b, a % b);}当b为0时,结束递归,此时a即为a和b的最大公约数。1. 裴蜀定理定理内容:如果a、b均是整数,则一定存在整数x和y,使得ax + by = gcd(a, b)成立。 我们可以再深层次的理解一下式子ax + by = gcd(a, b)的含义,也就是说,整数a和整数b进原创 2020-09-06 22:22:28 · 5177 阅读 · 0 评论 -
【快速幂】对快速幂代码的理解
基本的二进制转十进制、位运算都懂了的话,但是看不懂快速幂代码的、死记硬背的同学可以继续看。模板代码:typedef long long ll;ll quick_pow(ll a,ll b){ ll res = 1; while(b > 0){ if(b & 1){ res *= a; } a *= a; b >>= 1; } retu...原创 2020-03-02 19:33:46 · 185 阅读 · 0 评论 -
数据结构与算法(7) - 单调栈与单调队列详解
单调栈和单调队列两种特殊的数据结构详解及模板代码原创 2021-02-09 12:58:52 · 237 阅读 · 0 评论 -
数据结构与算法(6) - 图
1. 定义由定点和边构成。2. 邻接矩阵表示矩阵的元素表示的是两点间是否有边。对于一个网络而言,不仅仅有边,边还有相应的权重。无向图的邻接矩阵是对称矩阵,可以压缩存储。缺点:浪费空间:存储稀疏图时浪费时间:统计图中总的边数时3.邻接表表示邻接表的“表”不是指表格,指的是链表。即开一个指针数组,每个数组存储该点的邻居节点。相比邻接矩阵,图足够稀疏的时候才比较合算。优点:方便找到某点的所有邻接点。表示稀疏图的时候节约空间方便计算无向图的“度”。缺点:只能计算有向图原创 2021-02-02 12:31:56 · 278 阅读 · 0 评论 -
数据结构与算法(5) - 堆
1. 堆1.1 定义首先它是一颗完全二叉树,但是每个节点都要满足根节点的值大于子树中所有节点的值,就叫它大顶堆。如果每个节点的值都小于子树中所有节点的值,那么就叫小顶堆。不是完全二叉树就不能是堆。1.2 最最最基本的两个操作up(x)向上调整节点x到合适的位置。dpwn(x)向下调整节点x到合适的位置。其他的操作都由这两个最最最基本的操作组合完成。1.3 插入插到最后,然后up。size++;heap[size] = x;up(size);1.4 删除删除的话,是原创 2021-02-01 16:16:38 · 71 阅读 · 0 评论 -
数据结构与算法(4) - 树
1. 树的定义和基本概念树:n(>= 0)个结点构成的有限集合。节点的度:节点的子树数目,即有多少子树,该节点的度就是多少。树的度:所有节点中最大的度数。叶节点:度为0的节点。路径和路径长度:节点a到节点b的路径就是二者之间的节点序列,边数为路径长度。祖先节点:root到某个节点的路径上的所有节点都是该节点的祖先节点。子孙节点:某个节点的所有子树中的节点都是该节点的子孙节点。层次:根节点在第一层,往下依次递增。树的深度(高度):树的层数。2. 树的特点子树是不相交的。除了根节点原创 2021-02-01 14:32:37 · 431 阅读 · 0 评论 -
数据结构与算法(3) - 栈和队列
1. 栈1.1 入门栈的典型用途:函数调用、递归、逆波兰算法。只有两个操作,入栈和出栈。特点:后入先出。1.2 顺序存储实现数组 + 记录栈顶元素位置的变量1.3 链式存储实现栈的链式存储结构实际上就是一个单链表,叫做链栈。把链表的头节点作为栈顶指针。2. 队列只有两个操作,入队和出队。2.2 顺序存储实现数组 + 记录队头元素和队尾元素位置的变量。2.3 链式存储实现...原创 2021-02-01 14:32:28 · 73 阅读 · 0 评论 -
数据结构与算法(2) - 线性表及两种存储结构
1 线性表1.1 线性表(Linear List)定义由同类型数据元素构成的有序序列的线性结构线性表是逻辑上的定义,不是物理存储上的定义1.2 线性表的抽象数据类型描述这里是抽象描述(数据对象集,有关操作)1.3 线性表的存储按照顺序结构存储的线性表称作“顺序表”,可以理解为数组。按照链式结构存储的线性表称作“链表”2 两种存储结构2.1 顺序存储结构借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。2.1.1 初始化要提前申请好足够大的存储空间要记录顺序原创 2021-01-29 16:29:42 · 1176 阅读 · 0 评论 -
数据结构与算法(1) - 数据结构入门
解决问题所用方法的效率,跟数据的组织方式有关,跟空间的利用效率有关,跟算法的巧妙程度有关。抽象数据类型数据类型数据对象集(数据类型中的各种元素都是什么)数据集合相关联的操作集(这个数据集有哪些操作,取某个元素?删除?创建?)抽象:描述数据类型的方法应该不依赖于具体如何实现。与存放数据的机器无关与数据存储的物理结构无关与实现操作的算法和编程语言无关抽象这个词只关心数据对象是什么,不关心它如何做到的。算法算法定义:算法是一个有限指令集输入可有可无,但至少有一个输出。一定是原创 2021-01-28 20:00:34 · 145 阅读 · 0 评论