
C
一颗海星
稳稳当当扎扎实实
展开
-
常量指针 与 指针常量
今天偶然想到了一个问题那就是:const* int p 与 int const* P 两者之间有什么区别? 去网上搜索了一下指针常量 和 常量指针的区别: 指针常量: 指针常量是,首先它是一个常量用指针来修饰它。定义形式为 type* const name 其中 name 只能指向一个地址然后不能改变,但是可以 修改它所指向地址的内容。 常量指针: ...原创 2018-08-05 00:15:29 · 177 阅读 · 0 评论 -
关于C 语言的内存分配问题
我们在做题时开数组经常会出现爆栈问题,那么这是为什么? 让我们带着问题先来了解一下C语言的内存分区,C语言内存分为五个区: 代码区:顾名思义这里是用来存储代码编译后的二进制机器码; 堆区:用于动态内存分配,一般由程序员分配或释放,如果程序员没有在程序运行中手动释放,那么会在程序结束后释放。 栈区:编译器自动分配和释放,一般用来存放局部变量、函数参数。 全局初始化数...原创 2018-08-05 22:14:05 · 253 阅读 · 0 评论 -
单调队列
单调队列是通过维护队列严格单调来解决问题,先看一个问题(北大OJ 2823): 分析一下问题:这是一个滑动窗口问题,题意是(英语菜鸡的翻译): 给你一个大小为 n (n<=10^6)的数组,有一个大小为k的滑动窗口从最左边移动到最右边,你只能看到窗口里的k个数字,每次滑动窗口移动一个位置,下面是一个例子(如上图)其中数组是[1 3 -1 -3 5 3 6 7],k 是 3你的任务...原创 2018-08-01 21:33:00 · 176 阅读 · 0 评论 -
二分图最大匹配-匈牙利算法
今天介绍 匈牙利算法 : 匈牙利算法,是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,由匈牙利数学家Edmonds于1965年提出,因而得名。 先介绍一下增广路径:若P是图G中一条连通两个未匹配顶点的路径,并且属于M的边和不属于M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。文字难以理解,看图: ...原创 2018-08-10 23:11:34 · 683 阅读 · 0 评论 -
堆-二叉堆
我们这里说的堆并不是内存中的堆,我们所说的是数据结构-堆,堆 也叫优先队列是一种特殊的完全二叉树,看下图这棵完全二叉树有什么特点? 他的每个父节点的值都不小于其子节点的值。这称为一个最大堆,最小堆就是父节点的值均不大于字节点的值的完全二叉树。 二叉堆有两点性质: ①结构性:堆具有完全树的结构 ②有序性:堆的父节点值一定不小大于(小于)其子节点的值 那...原创 2018-08-06 22:44:19 · 860 阅读 · 0 评论 -
图论-Dijkstra
Dijkstra-迪杰斯特拉 算法 算法是处理单源最短路径问题常用的算法,虽然时间复杂度(n^2)较高(但是可以优化),但是编写起来方便在处理小数据时还是很方便的. dijkstra 算法,在使用时需要指定一个起始点 n,因为这是 计算一个点到其它点最短路径的算法,这里需要 3 个数组 S , U 和flag 来辅助完成,其中 S 数组用来储存 点 i 到 n 的 最短路...原创 2018-08-07 21:50:24 · 2064 阅读 · 0 评论 -
Floyd 算法----只有5行的算法
与前面写的Dijkstra 都是关于最短路径的算法,但是不同的是Dijkstra算法是计算单源最短路径的算法,也就是只能计算出一个点到其他点的最短路径,Floyd算法是多源最短路径算法,可以计算出任意两点的最短路径。 在讲Floyd之前先想一个问题 假设我们已经存入了一个图(如下),我们怎么缩短两点之间的距离呢?显而易见只能找中间点来作为转接点,从而达到缩短距离。这个中间...原创 2018-08-08 01:12:43 · 224 阅读 · 0 评论 -
拓扑排序
拓扑排序是将一个有向无环图G的点进行排序形成一个线性序列,这个线性序列满足:对于途中任意一对顶点,若边(u,v) E (G),则再线性序列中 u 一定在v的前面,我们将这样的线性序列称为满足拓扑次序的序列。 算法很简单: 1 首先先在所有点中找到入度为 0 的点 将它存在一个名为 T的队列中. 2 然后将 T队列中第一个点u所指向的所有点的入度均 减 1 然后将 u 存入 另一...原创 2018-08-08 12:03:36 · 309 阅读 · 0 评论