算法与数据结构
文章平均质量分 74
罗罗CS
这个作者很懒,什么都没留下…
展开
-
北大acm1001题解题报告
求高精度幂Time Limit: 500MS Memory Limit: 10000KTotal Submissions: 120823 Accepted: 29507Description对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。 现在要你解决的问题是:原创 2013-08-10 17:13:19 · 3348 阅读 · 0 评论 -
二分查找的递归与迭代实现
//递归版本int BinarySearch (int[] a, int low, int high, int searchValue){if (high return -1;int mid;mid = low + ((high - low) / 2);if (a [mid] > searchValue)return BinarySearch (原创 2013-11-04 10:42:10 · 1516 阅读 · 0 评论 -
二叉排序树/二叉查找树 (binary sort tree/ binary search tree)的C语言实现
二叉排序树(Binary Sort Tree)又称二叉查找树,亦称二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; 我们假设用二叉链表进行存储;二叉链表结点。有三个域:一个数据域,两个分别指向左右子结点的原创 2014-02-20 20:41:05 · 1530 阅读 · 1 评论 -
SkipList 跳表
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前转载 2014-02-23 20:55:23 · 740 阅读 · 0 评论 -
字符串(char*)转化为int
一个精简版本:#include int my_atoi(const char* p){ assert(p != NULL); bool neg_flag = false;// 符号标记 int res = 0;// 结果 if(p[0] == '+' || p[0] == '-') neg_flag = (*p++ != '+'); while(isdigit(*p)) re原创 2014-02-24 21:24:22 · 1605 阅读 · 0 评论 -
关于深度优先搜索和广度优先搜索C语言的简明实现
深度优先搜索:从图的某顶点出发,依次访问该顶点的邻接点。 广度优先搜索:类似树的按层次遍历 依次访问某顶点各个未访问的顶点。 以遍历下图为例: 假设从1点开始遍历,深度优先:1能到2,到了2以后就不管1能到的3,5了,就直接以2为起始点,以此类推,知道到达一个点不能再继续往下,则退回到上一个结点,直到所有的点被遍历,举例其中的一个深度优先搜索:1-2-4-5原创 2013-08-24 11:23:46 · 15756 阅读 · 3 评论 -
二叉树的总结
一,二叉树的定义 二叉树(Binary tree)是n(n≥0)个结点的有限集合。若n=0时称为空树,否则: ⑴有且只有一个特殊的称为树的根(Root)结点; ⑵若n>1时,其余的结点被分成为二个互不相交的子集T1,T2,分别称之为左、右子树,并且左、右子树又都是二叉树。 由此可知,二叉树的定义是递归的。 二叉树在树结构中起着非常重要的作用原创 2014-02-19 17:05:00 · 1566 阅读 · 0 评论 -
如何直接访问类的私有成员?
Adobe的一道笔试题: class mystring{public: mystring(const string &str, const int count) { m_str = str; m_count = count; } private: string m_str; int m_count;};问,如何在不修改mystring类的任何代码的情况下原创 2014-03-10 10:57:42 · 2956 阅读 · 0 评论 -
排序算法总结-C语言实现
一,冒泡排序void bublle_sort(int *a,int n) //n为数组a的元素个数{ int i,j,temp; for(j=0;j原创 2014-02-17 21:17:18 · 1872 阅读 · 0 评论 -
迭代器失效场合
转载: http://blog.csdn.net/jfkidear/article/details/7287568一. 种类:标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串非标准关联容器hash_se转载 2014-03-26 14:27:33 · 696 阅读 · 0 评论 -
整数划分问题
转载出处:http://www.cppblog.com/superKiki/archive/2010/05/27/116506.aspx转载 2014-04-18 10:34:28 · 1463 阅读 · 0 评论 -
数学问题--大数乘以小数,大数乘以大数,大数的加法以及减法
#include #include void mult(char c[],char t[],int m) //t[]=c[]*m{ int i,l,k,flag,add=0; char s[100]; l=strlen(c); for (i=0;i s[l-i-1]=c[i]-'0'; for (i=0;i原创 2013-09-02 10:24:43 · 1907 阅读 · 0 评论 -
C语言程序所占内存的分类
(1)栈(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值、返回地址等,其操作方式类似于数据结果中的栈。栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{ }”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回转载 2014-02-22 15:33:54 · 1807 阅读 · 0 评论 -
北大 acm 3009
#includeusing namespace std;const int N=25;char maze[N][N];int w,h;int count;void dfs(int x,int y,int step){ if (step>count) //如果当前的步数超过了最小的步数,停止 return; int i; for(i=x+1;i<h;i++)原创 2013-09-05 14:07:04 · 800 阅读 · 0 评论 -
C语言快速统计其二进制形式中1的个数
基于文章 http://blog.csdn.net/luoluoxiaocainiao/article/details/11534653 的补充 就直接贴代码吧! #include int main(){ const int bits = sizeof(int)*8; int n,x; scanf("%d",&n); while (n--)原创 2013-09-10 18:44:45 · 1181 阅读 · 0 评论 -
北大 acm 3083解题报告--dfs与bfs的运用
题目:http://poj.org/problem?id=3083 题目的大意就是:输入一个类似迷宫的东西,其中S表示起点,E表示终点,#表示墙壁,,表示空地。其中S,E一定在边缘,并且S一定能到达E 例如: ######## #......# #.####.# #.####.# #.####.# #.####.# #...#..#原创 2013-09-04 11:11:19 · 886 阅读 · 0 评论 -
北大acm1002解题报告
487-3279Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 219174 Accepted: 38204Description企业喜欢用容易被记住的电话号码。让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语。例如,你需要给滑铁原创 2013-08-11 11:08:55 · 1282 阅读 · 1 评论 -
北大acm 1611,2524解题报告--关于并查集
这两道题都是比较简单的关于并查集使用的题目。有关并查集的知识,请参考: (1) http://www.cnblogs.com/ACShiryu/archive/2011/11/24/unionset.html (2)http://www.cnblogs.com/mikelin/archive/2010/08/11/1797556.html 其中:我们可以利用下面这段模板代码原创 2013-08-13 17:14:44 · 960 阅读 · 0 评论 -
北大acm 1067解题报告--关于威佐夫博奕
取石子游戏Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 31501 Accepted: 10381Description有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子原创 2013-08-17 10:56:55 · 1047 阅读 · 0 评论 -
求素数的优化算法
1. 根据概念判断:如果一个正整数只有两个因子, 1和p,则称p为素数.代码:bool isPrime(int n){ if(n < 2) return false; for(int i = 2; i < n; ++i) if(n%i == 0) return false; return true;}时间复杂度O(n).转载 2013-08-17 14:57:28 · 1590 阅读 · 0 评论 -
北大acm 1061解题报告--欧几里得算法及其应用
青蛙的约会Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 81739 Accepted: 14151Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到原创 2013-08-16 21:09:47 · 1050 阅读 · 0 评论 -
数学问题--大数的阶乘
#include #include int factorial(int n) //求阶乘,返回值 是结果值的位数{ long a[10000]; int i,j,c,m=0; a[0]=1; for(i=1;i<=n;i++) { c=0; for(j=0;j<=m;j++) { a[j]=a[j]*i原创 2013-09-01 21:56:53 · 1122 阅读 · 0 评论 -
pku acm 2488 源码
#include #include int chess[30][30];int visited[30][30];int p,q;char answer[1800];int cnt;int step[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};bool dfs(int r,int c){原创 2013-09-09 15:14:43 · 850 阅读 · 0 评论 -
数论的一些公式
以下等式或者不等式均可以用数学归纳法予以证明!1 + 3 + 5 + ... + (2n - 1) = n^21*2 + 2*3 + 3*4 + ... + n*(n + 1) = n*(n + 1)*(n + 2) / 31*1! + 2*2! + 3*3! + ... + n*n! = (n + 1)! - 11^2 + 2^2 + 3^2 + ... + n^转载 2013-09-09 21:58:29 · 1246 阅读 · 0 评论 -
pku acm 1321 源码
#include using namespace std ;char a[8][8] ;bool row[8] , col[8] ;int n , k ; int sum ;void dfs( int x , int y ,int step){ int i , j ; if ( step > k ) { sum++ ; return; } for ( i = x原创 2013-09-09 15:20:46 · 1038 阅读 · 0 评论 -
pku acm 2251源码
#include #include using namespace std;const int N=31;char maze[N][N][N];int visited[N][N][N];int dir[6][3]={{1,0,0},{0,-1,0},{-1,0,0},{0,1,0},{0,0,-1},{0,0,1}};int R,C,L;struct N原创 2013-09-09 15:22:26 · 846 阅读 · 0 评论 -
pku acm 3278源码
#include #include using namespace std;int n,k;const int N=100001;int Q[N];int visited[N];int ans[N];int bfs(int x){ if (x>=k) return (x-k); visited[x]=1; Q[0]=x; int原创 2013-09-09 15:32:19 · 874 阅读 · 0 评论 -
C语言 统计整数二进制表示中1的个数
C语言 统计整数二进制表示中1的个数这是一个很有意思的问题,也是在面试中最容易被问到的问题之一。这个问题有个正式的名字叫Hamming_weight,而且wikipedia上也提供了很好的位运算解决的方法,这个下面也会提到。解决这个问题的第一想法是一位一位的观察,判断是否为1,是则计数器加一,否则跳到下一位,于是很容易有这样的程序。?转载 2013-09-10 18:03:56 · 1710 阅读 · 0 评论 -
全排列以及集合的子集
全排列:#include #include #include #define N 200char str[N];char ret[N];int used[N];int len;void dfs(int cnt){ if (cnt == len) { puts(ret); return; } for (int i=0; i<len; ++i )原创 2014-09-12 15:28:49 · 1194 阅读 · 0 评论