随笔分类 -  数据结构/算法

摘要:代码如下:#include "stdafx.h"#include #include using namespace std;//10进制转换为17进制string TenTo17(int M){ string str=""; int n; char a; char b='+'; //b用于记录符号 if(M=0&&n=10&&n='0'&&str[i]='A'&&str[i]<='G') { temp=str[i]- 阅读全文
posted @ 2013-08-07 14:47 芒刺 阅读(1172) 评论(0) 推荐(0)
摘要:struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; }; struct StackN... 阅读全文
posted @ 2013-07-30 12:56 芒刺 阅读(275) 评论(0) 推荐(0)
摘要:经常遇到不同进制之间的转换,下面办法主要是讨论2到36之间进制转换问题。其实进制转换办法就是辗转相除,比如:如果我想把15进制转换成17进制。首先是将15进制转换成10进制,然后再将10进制的值转换成17进制,因此这个问题可以简化为两个问题:(1)N进制转换成10进制,(2)10进制转换成M进制。1-----下面是讨论如何将N进制转成10进制int M2N(int n,string s){//s代表一个N进制的数,现在将它转成10进制,比如:16进制:25FF2 if(s == "0") return 0; int len = s.length();//获取s的长度 int 阅读全文
posted @ 2013-06-08 10:19 芒刺 阅读(1100) 评论(1) 推荐(0)
摘要:二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。深度优先遍历二叉树。1. 中序遍历(LDR)的递归算法:若二叉树为空,则算法结束;否则: 中序遍历根结点的左子树; 访问根结点; 中序遍历根结点的右子树。2. 前序遍历(DLR)的递归算法:若二叉树为空,则算法... 阅读全文
posted @ 2013-05-24 10:23 芒刺 阅读(744) 评论(0) 推荐(0)
摘要:前两天,睡觉前,偶尔翻起算法导论,看到随机函数这一块内容,里面有一个练习题.5.1-2 描述random(a,b)过程的一种实现,它只调用random(0,1).作为a和b的函数,你的程序的期望运行时间是多少?注:random(a,b)为产生a,a+1,a+2,...,b的函数发生器,且产生各整数的概率相等,同为1/(b - a + 1).看到这个题目时,似曾相识,脑海浮现了利用random(0,1)产生0或1,从而组成二进制数,来完成random(a,b)的实现.但是细想以后,感觉有个问题在脑海中有点不明不白.运行random(0,1)函数k次,使得2k>=(b-a+1),将得到[0, 阅读全文
posted @ 2013-05-07 10:38 芒刺 阅读(236) 评论(0) 推荐(0)
摘要:1.HashMap的数据结构 数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,我们可以理解为“链表的数组”,如图: 从上图我们可以发现哈希表是由数组+链表组成的,一个长度为16的数组中,每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key)%len获得,也就是元素的key的哈希值对数组长度取模得到。比如上述哈希表中,.. 阅读全文
posted @ 2013-05-02 19:43 芒刺 阅读(174) 评论(0) 推荐(0)