2011年8月31日

二叉树的遍历(非递归)

摘要: 二叉树的遍历1.前序遍历 先访问根节点,再访问左子树,最后访问右子树。算法思想:从根到 1 void pre_order(struct ptree_node *root) 2 { 3 struct ptree_node *stack[MAX_SIZE], *p = root; 4 int top = 0; 5 while (NULL != p || top > 0) { 6 if (NULL != p) { 7 visit(p); 8 stack[top++] = p; 9 p =... 阅读全文

posted @ 2011-08-31 23:16 lambda107 阅读(147) 评论(0) 推荐(0) 编辑

常见排序算法

摘要: 1.直接插入排序 算法思想:在插入第N个元素的时候,前面N-1个元素已经是排好序的了,因此查找前面N-1个元素,讲第N个元素插入到合适的位置。实例:扑克牌抓拍,当玩家手头上有N-1个牌时,将第N个牌插入到合适的位置中代码: 1 int array[len] = {.......}; 2 3 void insert_sort(void) 4 { 5 int i = 0, j = 0; 6 int key = 0; 7 8 for (i = 1; i < len; i++) { 9 key = array[i];10 for (j = ... 阅读全文

posted @ 2011-08-31 22:19 lambda107 阅读(625) 评论(1) 推荐(0) 编辑

统计给定整数的二进制表示中1的个数

摘要: (1).逐位判断(位运算)Int get_counte(int n){ Intcounter = 0; While(n) { Counter+= n&1; n>>=1;}Return counter;}(2).一个整型不为0,那么二进制表示时,至少包含一位1。如果整数减去1,那么最右边的1变成0,而该1后面的0变成1,其余位不变。将原来的整数和减去1后的数做与运算,从原来最右边的那个1开始所有的,所有位变成0,如:1100&(1100-1=1011)=1000。也就是说整数与该数-1后做与运算,会把最右边一个1变成0。Int get_counter(int n){ 阅读全文

posted @ 2011-08-31 11:07 lambda107 阅读(1320) 评论(0) 推荐(0) 编辑

等概率随机函数的实现(对立事件的产生)

摘要: 题目: 给定一个随机函数rand(),以p的概率产生0,以1-p的概率产生1,要求设计一个新的随机函数,要求以1/n的概率产生1-n之间的一个数。思路:(1)通过随机函数rand()产生等概率的0和1的新随机函数rand_1()(2)调用k次(k为n的二机制表示的位数)rand_1(),得到一个位长为k的0和1的序列(3)上面产生的k个0/1序列表示1-n之间的数。注意: 如果如果产生的序列大于n,则重新产生直到产生的序列对应的值小于n(1):产生rand_1()int rand_1(){ int a = rand(); int b = rand(); if (a == 0 && 阅读全文

posted @ 2011-08-31 11:04 lambda107 阅读(517) 评论(0) 推荐(0) 编辑

导航