摘要:
什么是哈希表? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。说白了哈希表的原理其实就是通过空间换取时间的做法。。 哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。 而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该... 阅读全文
摘要:
据说有个计算圆周率的外星人程序,如下:#include<cstdio>#include<cstdlib> int a=10000,b,c=8400,d,e,f[8401],g;int main(){ for(;b-c;) f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a) for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); system("pause"); return 0;}稍微整理:#include<cstdi 阅读全文
摘要:
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。10/ \6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。首先我们定义的二元查找树节点的数据结构如下:struct BSTreeNode{int m_nValue; // value of nodeBSTreeNode *m_pLeft; // left child of nodeBSTreeNode *m_pRight; // right child of node};思想:1.构造二叉查找树;2.中序遍历二叉查找树,因此结点按从小到大顺序访 阅读全文
摘要:
二叉排序树(Binary Sort Tree)又称二叉查找树或二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树。通俗地讲很简单:一句话就是左孩子比父节点小,右孩子比父节点大,还有一个特性就是”中序遍历“可以让结点有序。如下图:几种常见的操作:1、二叉树数据结构struct BSTNode{ int data; // value of node BSTNode *lchild; // left ch... 阅读全文
摘要:
题意:有一个n*m大的农场,其中每一方格不是干旱就是潮湿,现在给出k个潮湿的方格信息(即每个潮湿方格的坐标),如果每个方格与其四连通的其中一个方格连通则构成一个湖泊,该湖泊所包含的方格数就是该湖泊的大小,现在要求构成的湖泊中最大的那个湖泊所包含的方格数。输入:3 4 53 22 23 12 31 1输出:4代码:#include<iostream>#include<cmath>using namespace std;#define MAX 101int n, m, k, num, G[MAX][MAX], f[MAX][MAX];int dir[4][2] = {{1, 阅读全文
摘要:
/* Author:yzm 求阶乘末尾0的个数 因式分解,有多少对2和5,末尾就有多少个0 而总是2多5少,所以5的个数决定了0的个数 进位思想: 先看有多少个5 (v除以5) 再看有多少个25 (v再除以5) 再看有多少个125(v再除以5) …… (类似于筛法)*/#include <cstdio>int main(){ int n, v, cnt; scanf("%d", &n); while(n --) { scanf("%d", &v); ... 阅读全文
摘要:
double的新认识:以前总听说可以用double骗过高精度小数,不知道是怎么一回事儿,而且意识上double最多可以精确6位小数(oh!我的天!这想法哪儿学来的)。现在发现,double应该用有效数字来衡量会比较好,double可以拥有17位有效数字(最后一位有效数字是小数的话接受下一位数的四舍五入),那么就是说,如果整数部分位数很小,那么,小数部分的精度就可以调得很高,像这个例子 但如果整数很大的话,小数精度就会下降了:所以,在整数部分很大而小数部分又需要比较高的精度的话(17位以内),可以把整数部分和小数部分分开处理最后分别输出就可以了。题意:根据题目给出的公式计算N从1到9的时候e的值 阅读全文
摘要:
同pku1562 Oil Deposits 油田合并(简单深搜)输入:10 12W........WW..WWW.....WWW....WW...WW..........WW..........W....W......W...W.W.....WW.W.W.W.....W..W.W......W...W.......W.输出:3代码:#include<iostream>using namespace std;char map[101][101];int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}}; 阅读全文
摘要:
题意:N*M的图中有一些'@',从该位置往四周8个位置延伸,求共有多少块互不连通的‘@’构成的块?简单的dfs便能搞定。。。输入:1 1*3 5*@*@***@***@*@*1 8@@****@*5 5****@*@@*@*@**@@@@*@@@**@0 0输出:0122代码:#include<iostream>using namespace std;char map[101][101]; //定义地图 map[][],标记油田状况 int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1 阅读全文
摘要:
递归实现:int CountNode(BiTree T) { if(T == NULL) return 0; return 1 + CountNode(T -> lchild) + CountNode(T -> rchild); } 阅读全文