算法
文章平均质量分 57
IndeReChill
这个作者很懒,什么都没留下…
展开
-
快慢指针判断单链表中是否存在环,存在返回环的起点的值
快慢指针判断单链表中是否存在环,存在返回环的起点的值原创 2016-03-15 21:25:28 · 827 阅读 · 0 评论 -
北航研究生复试2008上机第三题:字符串匹配
题目从string.in中读入数据,然后用户输入一个短字符串。要求查找string.in中和短字符串的所有匹配,输出行号、匹配字符串到string.out文件中。匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa[123]bb”,就是说aaa1bb、aa2bb、aa3bb都算匹配。主要部分: 1、读写文件 2、KMP匹配或者BF匹配算法 3、不区分大小写的比较原创 2018-02-06 15:55:29 · 722 阅读 · 0 评论 -
北航研究生复试2009上机第三题:字符串查找删除
题目给定文件filein.txt按照要求输出fileout.txt. 输入:无空格的字符串 输出:将filein.txt删除输入的字符串(不区分大小写),输出至fileout.txt。每行中的空格全部提前至行首。1、KMP匹配 2、不区分大小写地比较 3、子串删除 4、写文件要求(空格提前)#include#include#includechar* fi原创 2018-02-07 14:44:30 · 294 阅读 · 0 评论 -
北航研究生复试2010上机第三题:数组是否相同
题目两个整数组(无序,可重复) 判断两个整数组是否完全相同(重复元素的重复次数也相同)数组大小不同的直接得出不相同,大小相同的,排序之后再一一比较即可。/**两个整数组(无序,可重复)*判断两个整数组是否完全相同(重复元素的重复次数也相同)*/#include<stdio.h>#include<stdlib.h>bool Equal(in...原创 2018-02-08 12:58:43 · 202 阅读 · 0 评论 -
北航研究生复试2011上机第三题:显示省略
题目大意:给定一个字符串 其中包含‘-’,如dsafas-zdfaf10,将s-z中省略的字符全部显示出来:dsafastuvwxyzdfaf10,程序只考虑a-z, A-Z, 0-9。且a-S, 0-r之类的不进行扩展。原样输出。#include<stdio.h>#include<stdlib.h>#include<string.h>#define...原创 2018-02-23 13:07:28 · 174 阅读 · 0 评论 -
北航研究生复试2012上机第三题:统计关键字出现的位置
输入一行C语言代码,查找关键字if,while,for并按照出现顺序输出。输出格式: 关键字:位置 关键字:位置还是字符串匹配的问题,为了方便,程序中本人写成从文件中读取主串,可以按照题目要求,改成控制台输入。#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXS...原创 2018-02-23 18:15:38 · 559 阅读 · 0 评论 -
北航研究生复试2014上机第三题:冒号对齐
题目:,排版题。输入若干行字符,表示某电影的演职员表,每行只有一个冒号,冒号前面是职位,冒号后面是姓名,要求把各行冒号对齐,删除多余空格后输出。先输入一个数字,表示排版要求的冒号位置,该位置号保证比各行冒号前的最大字符数还要大。再输入若干行字符,最多50行,每行最多100个字符,除空格、制表符和回车之外都是有效字符,要求每行的冒号处于格式要求的位置,冒号两边与有效单词之间各有一个空格,冒号前面的单...原创 2018-03-02 16:14:51 · 728 阅读 · 0 评论 -
北航研究生复试2015上机第三题:记录单词并按字典顺序输出
题目:输入一段含标点的英文语段(若干行,以Ctrl+Z结束) 统计这段话中出现的所有词语,要求按照字典顺序输出词语,每输出一个词换一行(相同的词语只出现一次)#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#define MAXSIZE 1...原创 2018-03-03 09:31:07 · 563 阅读 · 0 评论 -
北航研究生复试2016上机第二题:计算枚举类型的值
题目:给出一个C语言的enum定义语句,输出enum中规定的各项值 例enum bool{true,false} 输出: true0 false1#include<stdio.h>#include<stdlib.h>#define MAXSIZE 10000#define STRSIZE 30typedef struct Node{ char...原创 2018-03-03 18:17:11 · 1073 阅读 · 0 评论 -
北航研究生复试2013上机第三题:科学计数表示法
题目:给定一个数(正数,前段和末端不包含多余的0),输出其科学计数法表示结果。如: 0.000002 —> 2e-6 123.456 —-> 1.23456e2 123456 —-> 1.23456e5//给定一个数(正数,前段和末端不包含多余的0),输出其科学计数法表示结果#include<stdio.h>#include<stdlib.h...原创 2018-02-24 17:59:03 · 306 阅读 · 0 评论 -
北航研究生复试2017上机第三题:二叉树的创建、遍历
题目:输入若干行,每一行的第一个输入为家谱中的某个成员,该行接着输入的信息为每个孩子姓名。 最后一行的输入为要求查找的两个家谱成员的关系。 要求,根据输入的家谱成员的信息,建立二叉树家谱关系图,并输出二位待查找成员在家谱中的关系,包括输出他们最近邻的共同祖先以及在家谱中相差的层次数。#include<stdio.h>#include<stdlib.h>#incl...原创 2018-03-04 15:16:59 · 1321 阅读 · 0 评论 -
北航研究生复试2017上机第二题:输出未定义变量
题目:输入两个C语言语句,第一句为正常的C语言变量定义语句,符合C语言语法要求,变量间可以有多个空格,包含数组,指针定义等。第二句为变量运算语句,要求输出第二个C语言语句中未定义的变量。 如 int x12,y=1,num_stu=89,a[30],*p; Sum = num+x12*y; 输出 Sum num我这里没有考虑结构体情况,和int x12; float y=1231...原创 2018-03-04 12:35:07 · 1230 阅读 · 0 评论 -
Convex Hull:O(n^4)算法
课程:计算几何书籍:计算几何:算法与应用极点:构成凸包的顶点,它具有这样的性质:经过该点,总能找到一条直线,使得其他所有点都在该直线的同一侧。根据该思路,极点不会处于其他顶点所构成的三角形内部。因此我们只需要所有点进行它是否在其他顶点所组成的三角形内部做判断,即可得出所有的极点。如何判断一个点是否在三角形内:按逆时针方向去看三角形的边,如果一个点在三角形内部,则该点总在三角...原创 2018-06-22 21:19:24 · 487 阅读 · 0 评论 -
Convex Hull:O(n^3)算法
课程:计算几何书籍:计算几何:算法与应用极边:对凸包有贡献的那些边。从Counter Clockwise来看,所有点都会落在极边的左侧(或者在极边上),而右侧为空。根据该思路,我们只需判断任意两点所构成的边是否为极边,即其他点是否都在同一侧(后者在边上)。判断点在边上的哪一侧,我们仍然使用O(n^4)算法中的ToLeft测试。代码: Patch.h与O(n^4)算法算...原创 2018-06-22 22:30:23 · 518 阅读 · 0 评论 -
Convex Hull:O(n^2)算法
课程:计算几何书籍:计算几何:算法与应用采用一种增量式(Incremental)的思维。考虑在已有的凸包上,在添加一个新的顶点,应该如何操作。 我们可以从新增的点向凸包引射线,我们能找到新增点与凸包的两个切点:s和t,s和t将凸包分成两段。其中有一段上的凸包顶点是需要更新的,另一段上的凸包顶点是需要保留的。具体的怎么判断请大家自行观看上述计算几何课程代码: Point....原创 2018-06-23 19:07:14 · 358 阅读 · 0 评论 -
Convex Hull:O(h*n)算法 Jarvis March
课程:计算几何书籍:计算几何:算法与应用Jarvis March算法也是一种递增式的思路。以极边的一个端点为起点,来查找另一条极边。以此进行下去,最后构成一个环路时(极点的末端等于最初的起始端点)。凸包构造结束。关于以一个极边为起始点的一天极边。可以用ToLeft测试进行比较,就如同O(n^2)中对点集逆时针排序那样。关于如何确定起始点,我们选取字典序最小的点作为起始点(Y值最...原创 2018-06-23 23:48:46 · 744 阅读 · 0 评论 -
八皇后问题
/***8皇后问题***/#include<stdio.h>#include<stdlib.h>#define MAXSIZE 8int gEightQueen[MAXSIZE] = {0}; //数组下标代表行数,数组内存储的数据代表列数int gCount = 0; //记录可行的情况数void ...原创 2018-02-26 19:09:04 · 260 阅读 · 0 评论 -
递归返回特定条件下的所求值
今天写一个简单的递归写懵逼了,用for替代递归还能想到,但是就用递归来返回特定值就不知道怎么写了。 然后看了一下以前的笔记,决定再做一下笔记。题目,比如:返回最后一次递归的值1、首先将特定的条件单独拿出来判断 2、创建返回值的“”窗口“”,将值在出栈中逐步返回int iterate(int x, int n);int main(){ int x,times;原创 2018-02-06 20:27:31 · 469 阅读 · 0 评论 -
哈夫曼树创建和哈夫曼码生成
直接上代码。 HTree.htypedef struct HTreeNode { char data; int weight; int parent, lchild, rchild;}HTreeNode;main.cpp#include#include#include#include"HTree.h"HTreeNode* InitHTree(int原创 2018-01-28 16:23:06 · 878 阅读 · 0 评论 -
获得栈的任一位置的元素并删除 不破坏栈的结构
已知一个int 类型栈结构stack<int > s 要求删除栈中第position(从0开始)位置的值,并返回该值。原创 2016-03-12 21:37:34 · 8449 阅读 · 0 评论 -
实现栈的逆序 递归 不申请额外的数据结构
实现栈的逆序 递归 不申请额外的数据结构原创 2016-03-13 22:00:00 · 1237 阅读 · 0 评论 -
根据中序和前序重建二叉树
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。前序序列 vector<int > pre:【1,2,3,4,7,3,5,6,8】 中序序列 vector<int> in:【4,7,2,1,5,3,8,6】 要求重建二叉树并返回。原创 2016-05-07 12:47:49 · 413 阅读 · 0 评论 -
求次方的几种方法(分治、位运算)
以下情况都以 base^exponent 底数(double 类型)base 指数(int类型)exponent为例,且不考虑数据溢出的情况。一、普通方法:1、思路:for循环直接求,注意几种特殊情况的讨论(exponent=0; exponent二:分治法1、思路:如图2、代码:原创 2016-04-25 18:56:33 · 3003 阅读 · 1 评论 -
非递归前序、中序、后序遍历二叉树
辅助栈实现非递归前序、中序、后序遍历二叉树原创 2016-04-24 13:05:20 · 516 阅读 · 0 评论 -
一个整型数组里除了两个数之外,其他数都出现了两次。找出这两个出现一次的数。
第一个想法是借助辅助数组以及折半插入来实现 第二个想法是通过 异或运算 实现原创 2016-07-23 14:18:34 · 679 阅读 · 0 评论 -
最长递增子序列算法
最长递增子序列求法 DP O(n^2)和 插入O(n*logn)原创 2016-05-15 09:25:28 · 573 阅读 · 0 评论 -
最长公共子序列详解及代码实现
最长公共子序列详解及代码实现原创 2016-09-28 16:24:46 · 6819 阅读 · 1 评论 -
汉诺塔(必须经过中间柱子)递归与非递归详解与代码实现
首先介绍一下汉诺塔最初始的规则:有三根相邻的柱子,标号为A,B,C,A柱子从上到下按照金字塔状叠放着n个不同大小的圆盘,现在把所有的盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。这是最初始的规则,实现的思路可以分为两个步骤: (假设圆盘期初都在左边的柱子上,想移动到右边的柱子上) 1.如果只有一个圆盘,直接把左边的圆盘移动到右边。 2.如果有n个圆盘(n>1原创 2016-10-04 19:48:00 · 4858 阅读 · 0 评论 -
扫描线填充多边形算法详解与代码
扫描线填充多边形算法详解与代码首先给出已知信息:多边形结构体里面包含三个信息:顶点个数,顶点和颜色class MyPolygon{public: int m_VerticeNumber; CPoint m_Vertex[50]; COLORREF m_LineColor;}思路: 找到多边形的最小y值和最大y值,然后用这个范围内的每一条水平线与多边形相交,通过原创 2016-10-30 19:54:43 · 34967 阅读 · 69 评论 -
串的模式匹配算法:BF算法与KMP算法
下面两种算法都是根据如果具体例子讨论 主串MainString: acabaabcabcacaabc 模式串ModelString: abaabca1、BF算法1)思路分别用i,j记录主串MainString和模式串ModelString中当前正在比较的字符位置。i 初始值为0,j初始值也为0当两个串均未到达串尾时: 若MainString[i] == ModelSt原创 2018-01-05 21:02:45 · 607 阅读 · 0 评论 -
图的邻接矩阵、邻接表的表示
关于邻接矩阵、邻接表的具体包含哪些数据我就不说了,鄙人时间有点赶,大家自行百度下哈。程序中图的例子: 2.1号:补充,突然发现我的程序,边的权重只能为1位数,如果权重为多位数,只取个位数的值,因此需要进行下面的修改:(邻接矩阵、邻接表都一样) 1) weight初始化为0(以前没有初始化) 2)从控制台得到:weight = weight * 10 + int(c - ‘0’);原创 2018-01-30 23:01:09 · 1785 阅读 · 1 评论 -
图的深度优先遍历和广度优先遍历
代码是在上一篇博客的基础上实现的。传送门:图的邻接矩阵、邻接表的表示增加的点: 1、结点中增加Tag,用于记录结点的是否已经遍历 2、邻接矩阵的DFS和BFS 3、邻接表的DFS和BFS2.1号:补充,突然发现我的程序,边的权重只能为1位数,如果权重为多位数,只取个位数的值,因此需要进行下面的修改:(邻接矩阵、邻接表都一样) 1) weight初始化为0(以前没有初始化)原创 2018-01-31 14:09:20 · 593 阅读 · 0 评论 -
两个多项式相加
题目:求两个多项式相加polynomial.htypedef struct Node{ int coefficient; int exponent;}Node;typedef struct Polynomial{ int numOfNode; Node* n;}Polynomial;main.cpp/*** 两个多项式相加**原创 2018-02-01 14:45:01 · 1380 阅读 · 0 评论 -
二叉树:创建,遍历(递归、非递归、层次)
废话不多说,直接堆代码。Tree.htypedef struct TreeNode{ struct TreeNode* lchild; struct TreeNode* rchild; char data;}TreeNode;main.cpp#include#include#include"Tree.h"TreeNode* LCreateTree原创 2018-01-27 20:10:44 · 242 阅读 · 0 评论 -
Convex Hull:O(n * log(n))算法 Graham Scan
课程:计算几何书籍:计算几何:算法与应用具体思路请自行观看上述的课程。 这里具体讲一下顶点集的排序: 我们通过X轴从大到小排序,然后运用Graham Scan算法可以得出构成上凸包的顶点。 然后逆序顶点顺序,运用Graham Scan算法可以得出构成下凸包的顶点。 结合两者,去掉重复点,即可得到构成整个凸包的顶点。Point.h与之前一样Main.cpp/*...原创 2018-07-03 11:50:58 · 487 阅读 · 0 评论