
数据结构与算法
文章平均质量分 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 · 1506 阅读 · 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 · 255 阅读 · 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 · 249 阅读 · 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 · 814 阅读 · 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 · 5503 阅读 · 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 · 223 阅读 · 0 评论 -
数据结构与算法(7) - 单调栈与单调队列详解
单调栈和单调队列两种特殊的数据结构详解及模板代码原创 2021-02-09 12:58:52 · 273 阅读 · 0 评论 -
数据结构与算法(6) - 图
1. 定义 由定点和边构成。 2. 邻接矩阵表示 矩阵的元素表示的是两点间是否有边。 对于一个网络而言,不仅仅有边,边还有相应的权重。 无向图的邻接矩阵是对称矩阵,可以压缩存储。 缺点: 浪费空间:存储稀疏图时 浪费时间:统计图中总的边数时 3.邻接表表示 邻接表的“表”不是指表格,指的是链表。 即开一个指针数组,每个数组存储该点的邻居节点。 相比邻接矩阵,图足够稀疏的时候才比较合算。 优点: 方便找到某点的所有邻接点。 表示稀疏图的时候节约空间 方便计算无向图的“度”。 缺点: 只能计算有向图原创 2021-02-02 12:31:56 · 310 阅读 · 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 · 98 阅读 · 0 评论 -
数据结构与算法(4) - 树
1. 树的定义和基本概念 树:n(>= 0)个结点构成的有限集合。 节点的度:节点的子树数目,即有多少子树,该节点的度就是多少。 树的度:所有节点中最大的度数。 叶节点:度为0的节点。 路径和路径长度:节点a到节点b的路径就是二者之间的节点序列,边数为路径长度。 祖先节点:root到某个节点的路径上的所有节点都是该节点的祖先节点。 子孙节点:某个节点的所有子树中的节点都是该节点的子孙节点。 层次:根节点在第一层,往下依次递增。 树的深度(高度):树的层数。 2. 树的特点 子树是不相交的。 除了根节点原创 2021-02-01 14:32:37 · 480 阅读 · 0 评论 -
数据结构与算法(3) - 栈和队列
1. 栈 1.1 入门 栈的典型用途:函数调用、递归、逆波兰算法。 只有两个操作,入栈和出栈。 特点:后入先出。 1.2 顺序存储实现 数组 + 记录栈顶元素位置的变量 1.3 链式存储实现 栈的链式存储结构实际上就是一个单链表,叫做链栈。把链表的头节点作为栈顶指针。 2. 队列 只有两个操作,入队和出队。 2.2 顺序存储实现 数组 + 记录队头元素和队尾元素位置的变量。 2.3 链式存储实现 ...原创 2021-02-01 14:32:28 · 101 阅读 · 0 评论 -
数据结构与算法(2) - 线性表及两种存储结构
1 线性表 1.1 线性表(Linear List)定义 由同类型数据元素构成的有序序列的线性结构 线性表是逻辑上的定义,不是物理存储上的定义 1.2 线性表的抽象数据类型描述 这里是抽象描述(数据对象集,有关操作) 1.3 线性表的存储 按照顺序结构存储的线性表称作“顺序表”,可以理解为数组。 按照链式结构存储的线性表称作“链表” 2 两种存储结构 2.1 顺序存储结构 借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。 2.1.1 初始化 要提前申请好足够大的存储空间 要记录顺序原创 2021-01-29 16:29:42 · 1249 阅读 · 0 评论 -
数据结构与算法(1) - 数据结构入门
解决问题所用方法的效率,跟数据的组织方式有关,跟空间的利用效率有关,跟算法的巧妙程度有关。 抽象数据类型 数据类型 数据对象集(数据类型中的各种元素都是什么) 数据集合相关联的操作集(这个数据集有哪些操作,取某个元素?删除?创建?) 抽象: 描述数据类型的方法应该不依赖于具体如何实现。 与存放数据的机器无关 与数据存储的物理结构无关 与实现操作的算法和编程语言无关 抽象这个词只关心数据对象是什么,不关心它如何做到的。 算法 算法定义: 算法是一个有限指令集 输入可有可无,但至少有一个输出。 一定是原创 2021-01-28 20:00:34 · 184 阅读 · 0 评论