数据结构
村西头的小二哥
这个作者很懒,什么都没留下…
展开
-
动态栈的基本操作
#include#include#define ERROR 0#define OK 1#define STACK_INT_SIZE 10 /*存储空间初始分配量*/#define STACKINCREMENT 5 /*存储空间分配增量*/typedef int ElemType; /*定义元素的类型*/typedef struct{ ElemType *原创 2014-11-04 13:52:43 · 862 阅读 · 0 评论 -
数独
数独时间限制:1000 ms | 内存限制:65535 KB难度:4描述 数独是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个3*3宫内的数字均含1-9,不重复。 每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。原创 2016-03-16 20:55:12 · 734 阅读 · 0 评论 -
大数阶乘
时间限制:3000 ms | 内存限制:65535 KB难度:3描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?输入输入一个整数m(0输出输出m的阶乘,并在输出结束之后输入一个换行符样例输入50样例输出3041409320171337804361260816606476884437764156896原创 2014-07-05 15:26:32 · 605 阅读 · 0 评论 -
蓝桥杯--六角填数
如图【1.png】所示六角形中,填入1~12的数字。 使得每条直线上的数字之和都相同。 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?请通过浏览器提交答案,不要填写多余的内容。思路:从上到下,从左到右的顺序,给这个十二个数字编号,然后用深搜。代码:#include #include #inc原创 2016-03-10 16:16:50 · 743 阅读 · 0 评论 -
蓝桥杯--地宫取宝
标题:地宫取宝 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。 当小明走到出口时,如果他手中的原创 2016-03-11 17:14:51 · 4649 阅读 · 0 评论 -
树状数组
这几天一直学习树状数组,可是还是一知半解。 如果给定一个数组,要你求里面所有数的和,一般都会想到累加,但是当那个数组很大的时候,累加就显得太耗时了,时间复杂度为O(n),并且采用累加的方法还有一个局限,那就是,当改掉数组中的某一个元素之后,仍然让你求数组中某段元素的和,就显得麻烦 了,所以我们就要用到树状数组,它到 时间复杂度为O(lgn),相比之下就快的多,。下面就说一下什么是树状数组:原创 2015-01-16 16:41:43 · 648 阅读 · 0 评论 -
D的小L
D的小L时间限制:4000 ms | 内存限制:65535 KB难度:2描述 一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧),有一个数n(0,,,聪明的你能帮匡匡解围吗?输入第一行输入一个数N(0输出按特定顺序输出所有组合。特定顺序:每一个组合中的值从小到大排列,组合之间按字原创 2014-08-14 10:47:14 · 734 阅读 · 0 评论 -
quicksort的实现
quicksort的代码实现代码:#includeint a[100002];int book[100002];int i,n;void quicksort(int x,int y){ if(x>y) { return ; } int left,right,temp,t; temp=a[x]; left=x; right=y; while(left!=righ原创 2016-03-11 18:29:14 · 553 阅读 · 0 评论 -
组合数
组合数时间限制:3000 ms | 内存限制:65535 KB难度:3描述 找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。输入输入n、r。输出按特定顺序输出所有组合。特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。样例输入5 3样例输出5435425415325315214324314原创 2014-07-13 17:02:48 · 793 阅读 · 0 评论 -
蓝桥杯--移动距离
移动距离X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:1 2 3 4 5 612 11 10 9 8 713 14 15 .....我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)原创 2016-03-14 18:40:09 · 1890 阅读 · 2 评论 -
郁闷的C小加(一)
郁闷的C小加(一)时间限制:1000 ms | 内存限制:65535 KB难度:3描述我们熟悉的表达式如a+b、a+b*(c+d)等都属于中缀表达式。中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2。同理,后缀表达式就是操作符在两个操作数之后:num1 num2 operand。ACM队的“C小加”正在郁闷怎样把一个中缀表达式转原创 2014-12-11 19:34:30 · 921 阅读 · 0 评论 -
二叉树的建立基本操作(链表方式)(一)
学习数据结构,一直对二叉树不了解,对指针的调用一知半解。这二天学二叉树,搞懂了一点点,先写出代码,以后再边学习边来改进。#include #include typedef char DataType;typedef struct node{ DataType data; struct node *lchild; struct node *rchild;原创 2014-11-02 10:31:11 · 1591 阅读 · 3 评论 -
二叉树的基本操作(二)
这是对二叉树一的补充#include #include #define MaxSize 100#define MaxWidth 40int LeafCount=0;int Layer=1;typedef char ElemType;typedef struct tnode{ElemType data;struct tnode *lchild,*rchil原创 2014-11-11 17:00:51 · 746 阅读 · 0 评论 -
最小生成树算法--并查集实现
第一行有两个数,n和m,n表示有n个顶点,m表示有m条边,接下来m行,没行行如a b c,用来表示一条边,意思是从顶点a到顶点b的权值为c。求最小生成树输入数据:6 92 4 113 5 134 6 35 6 42 3 64 5 71 2 13 4 91 3 2运行结果:19主要的代码实现://通过并查集实现最小原创 2016-03-08 17:26:56 · 743 阅读 · 0 评论 -
字符串算法——字典树
Trie树,又称字典树、单词查找树,是一种树形结构,用于保存大量的字符串,其核心思想是空间换时间。它的优点是:利用字符串的公共前缀来节约存储空间。相对来说,Trie树是一种比较简单的数据结构.理解起来比较简单,正所谓简单的东西也得付出代价.故Trie树也有它的缺点,Trie树的内存消耗非常大。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它原创 2016-04-09 20:55:28 · 960 阅读 · 0 评论 -
大数开方
大数开方:代入法1、把被开方数的整数部分从个位起向左每隔n位为一节,用撇号分开;2、根据左边第一节里的数,求得开n次算术根的最高位上的数,假设这个数为a;3、从第一节的数减去求得的最高位上数的n次方,在它们的差的右边写上第二节数作为第一个余数;4、用第一个余数除以n(10a)^(n-1),所求的整数部分试商(如果这个最大整数大于或等于10,就用9做试商);5原创 2016-06-01 09:28:06 · 4498 阅读 · 1 评论 -
字符串算法之 AC自动机
最近一直在学习字符串之类的算法,感觉BF算法,虽然很容易理解,但是容易超时,所有就想学习其他的一些字符串算法来提高一下,最近学习了一下AC自动机,虽然感觉有所收获,但是还是有些朦胧的感觉,在此总结一下,希望大家指教。一、AC自动机的原理:Aho-Corasick automaton,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出N个单词,在给出一段包含原创 2016-04-19 20:58:31 · 1672 阅读 · 0 评论 -
蓝桥杯--数字排列
今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:17126425374635当然,如果把它倒过来,也是符合要求的。请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。注意:只填写这个14位的整数,不能填写任何原创 2016-03-16 11:02:07 · 3894 阅读 · 3 评论 -
Haffman编码
Haffman编码时间限制:1000 ms | 内存限制:65535 KB难度:3描述哈弗曼编码大家一定很熟悉吧(不熟悉也没关系,自己查去。。。)。现在给你一串字符以及它们所对应的权值,让你构造哈弗曼树,从而确定每个字符的哈弗曼编码。当然,这里有一些小规定:1.规定哈弗曼树的左子树编码为0,右子树编码为1;2.若两个字符权值相同,则ASC原创 2015-07-28 09:45:42 · 2555 阅读 · 9 评论 -
红黑树
红黑树时间限制:3000 ms | 内存限制:65535 KB难度:3描述什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子是红色的树。。。当然,这个是我说的。。。《算法导论》上可不是这么说的:如果一个二叉查找树满足下面的红黑性质,那么则为一个红黑树。1)每个节点或是红的,或者是黑的。2)每个叶子节点原创 2015-01-16 20:47:58 · 741 阅读 · 0 评论 -
二叉排序树的基本操作
#include#includetypedef struct node{/*定义二叉排序树的结构*/int key;struct node *lchild;struct node *rchild;}BSTnode, *BSTree;void InsertBST( BSTree *bst,int key){/*插入二叉排序树*/BSTree s;if(*原创 2014-11-22 13:46:56 · 1001 阅读 · 0 评论 -
后序和中序建立二叉树或者先序和中序建立二叉树
代码实现#include #include #include typedef struct node{ char data;//节点数据元素 struct node *lchild;//指向左孩子 struct node *rchild;//指向右孩子}BiNode,*BTree;void GetPreOrder(char *last,char *mi原创 2014-11-22 12:29:48 · 1345 阅读 · 0 评论 -
重建二叉树
重建二叉树时间限制:1000 ms | 内存限制:65535 KB难度:3描述题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。输入输入有多组数据(少于100组),以文件结尾结束。每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。输出每组输出原创 2014-11-24 18:37:41 · 740 阅读 · 0 评论 -
士兵杀敌(一)
士兵杀敌(一)时间限制:1000 ms | 内存限制:65535 KB难度:3描述南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。小工是南将军手下的军师,南将军现在想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。注意,南将军可能会问很多次问题。输入只有一组测试数据第一行是两个整数N,M,其原创 2014-12-17 14:00:31 · 590 阅读 · 0 评论 -
Binary String Matching
Binary String Matching时间限制:3000 ms | 内存限制:65535 KB难度:3描述Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear a原创 2014-12-17 14:38:57 · 635 阅读 · 0 评论 -
笨蛋难题四
笨蛋难题四时间限制:1000 ms | 内存限制:65535 KB难度:3描述这些日子笨蛋一直研究股票,经过调研,终于发现xxx公司股票规律,更可喜的是 笨蛋推算出这家公司每天的股价,为了防止别人发现他的秘密。他决定对于这家公司的 股票最多买一次,现在笨蛋已经将股票价格列了出来。(这已经不是笨蛋的难题了,他已经解决 呵 呵)。只想难为难为你呀,从股票价格原创 2015-01-06 14:18:08 · 604 阅读 · 0 评论 -
郁闷的C小加(二)
郁闷的C小加(二)时间限制:1000 ms | 内存限制:65535 KB难度:4描述聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。输入第一行输入一个整数T,共有T组测试数据原创 2014-12-16 13:32:26 · 742 阅读 · 0 评论 -
二叉树的基本操作及应用(三)
#include #include #include #include typedef char DataType;int depth=0;int h1=1;int nlayer=1;char ch2;typedef struct node{ DataType data;//节点数据元素 struct node *lchild;//指向左孩子 struct n原创 2014-12-21 17:18:40 · 960 阅读 · 0 评论 -
Tree
Tree时间限制:1000 ms | 内存限制:65535 KB难度:3描述Little Valentine liked playing with binary trees very much. Her favorite game was constructing randomly looking binary trees with capital lett原创 2015-01-14 21:36:05 · 780 阅读 · 0 评论 -
中缀式变后缀式
中缀式变后缀式时间限制:1000 ms | 内存限制:65535 KB难度:3描述人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。输入第一行输入一个整数n,共有n组测试数据(n每组测试数据只有一行,是原创 2014-12-11 19:36:58 · 896 阅读 · 0 评论 -
表达式求值
表达式求值时间限制:3000 ms | 内存限制:65535 KB难度:4描述ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧。比如输入:“1+2/4=”,程序就输出1.50(结果保留两位小数)输入第一行输入一个整数n,共有n组测试数原创 2014-12-14 10:18:15 · 819 阅读 · 0 评论 -
小猴子下落
小猴子下落时间限制:3000 ms | 内存限制:65535 KB难度:3描述有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关原创 2014-12-13 10:33:35 · 595 阅读 · 0 评论 -
蚂蚁的难题(二)
蚂蚁的难题(二)时间限制:1000 ms | 内存限制:65535 KB难度:3描述下雨了,下雨了,蚂蚁搬家了。已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈。小蚂蚁对每种食材都有一个喜爱程度值Vi,当然,如果Vi小于0的时候,表示蚂蚁讨厌这种食材。因为马上就要下雨了,所以蚂蚁只能搬一次,但是能够搬走连续一段的食材。时间紧急,你快帮帮小原创 2015-07-28 15:52:34 · 809 阅读 · 0 评论 -
算法8:巧妙的邻接表(数组实现)
之前我们介绍过图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。1234564 51 4 94 3 81 2 52 4 61原创 2015-08-11 15:18:09 · 1097 阅读 · 0 评论 -
相同的雪花
相同的雪花时间限制:1000 ms | 内存限制:65535 KB难度:4描述You may have heard that no two snowflakes are alike. Your task is to write a program to determine whether this is really true. Your program w原创 2015-07-19 12:24:05 · 717 阅读 · 0 评论 -
建堆,以及对堆排序
建堆,以及对堆排序代码:#includeint h[101];//用来存放堆的数组 int n;//用来存储堆中元素的个数,就是堆的大小 //交换函数,用来交换堆中的俩个元素的值 void swap(int x,int y){ int t; t=h[x]; h[x]=h[y]; h[y]=t;}//向下调整函数 void siftdown(int i){/原创 2015-08-13 11:10:32 · 785 阅读 · 0 评论 -
蓝桥杯--格子中输出
格子中输出StringInGrid函数会在一个指定大小的格子中打印指定的字符串。要求字符串在水平、垂直两个方向上都居中。如果字符串太长,就截断。如果不能恰好居中,可以稍稍偏左或者偏上一点。下面的程序实现这个逻辑,请填写划线部分缺少的代码。#include #include void StringInGrid(int width, int heig原创 2016-03-14 15:26:18 · 4201 阅读 · 3 评论