代码改变世界

中缀、前缀、后缀表达式之间的转换

2012-07-19 21:21 by iamzhaiwei, 313 阅读, 0 推荐, 收藏, 编辑
摘要:中缀表达式转换为后缀表达式:从前面扫描,从前面输出中缀表达式转换为前缀表达式:从后面扫描,从后面输出前缀表达式和后缀表达式转换为中缀表达式:重建计算树,中序遍历树,子节点的优先级若低于父节点,子树的表达式两端加括号稍后贴上源程序 阅读全文

Linux多线程──读者写者问题

2012-07-12 21:37 by iamzhaiwei, 495 阅读, 0 推荐, 收藏, 编辑
摘要:读者写者问题这也是一个非常经典的多线程题目,题目大意如下:有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者读时写者也不能写。程序:// reader_writer.cpp ////////////////////////////////////////////////////////////////////// // 读者写者问题 // 有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件, // 同样有读者读时写者也不能写。 //////////////////////////////////////////////// 阅读全文

Linux多线程──生产者消费者

2012-07-12 20:51 by iamzhaiwei, 287 阅读, 0 推荐, 收藏, 编辑
摘要:生产者消费者问题这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,所有生产者和消费者都是异步方式运行的,但它们必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经装满产品且尚未被取走的缓冲区中投放产品。程序:// producer_consumer.cpp ///////////////////////////////////////////////////////// 阅读全文

Linux多线程──3个子线程轮流运行

2012-07-10 21:49 by iamzhaiwei, 472 阅读, 0 推荐, 收藏, 编辑
摘要:迅雷笔试题:编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。程序:#include <pthread.h> #include <cstdio> const int THREAD_NUMBER = 3; // 子线程的互斥量和条件变量 pthread_mutex_t thread_mutex[THREAD_NUMBER]; pthread_cond_t thread_cond[THREAD_NUMBER]; // 子线程是否正在等待 bool threa 阅读全文

Linux多线程──主线程和子线程分别循环一定次数

2012-07-08 20:54 by iamzhaiwei, 487 阅读, 0 推荐, 收藏, 编辑
摘要:子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次,试写出代码。要注意条件变量的自动复位问题。参看这篇文章:Linux 的多线程编程的高效开发经验代码:#include <pthread.h> #include <stdio.h> // 互斥锁,条件变量 pthread_mutex_t mutex; pthread_cond_t cond; // 循环次数 int main_count = 0; int subthread_count = 0; // 线程等待标志 bool main_thread_wai 阅读全文

华为面试2:1分2分5分的硬币,组成1角,共有多少种组合。

2012-07-05 11:38 by iamzhaiwei, 407 阅读, 0 推荐, 收藏, 编辑
摘要:动态规划,注意不要有重复的,例如组成1角钱,5 2 2 1 和 1 2 2 5是1种组合算法的设计思想在程序中注释的很清楚。解法一:// 动态规划 // total_money: 要找的零钱总和 // changes: 零钱数组,已经从小到大排序,第1个元素设为0,有效元素从第2个位置即下标1开始 // kinds_change: 零钱种类 int make_change_problem(int total_money, int *changes, int kinds_change) { // opt[i][j]表示用前j种零钱组成i元钱的组合数目,第j种零钱的数目可以为0 b... 阅读全文

淘宝面试题:有一个一亿节点的树,现在已知两个点,找这两个点的共同的祖先。

2012-06-30 16:46 by iamzhaiwei, 284 阅读, 0 推荐, 收藏, 编辑
摘要:如题。分析:假设这棵树的每个结点都有n的指针指向n棵子树,可能有的子树为空。已知的两个结点的关系有两种情况:一个结点是另一个结点的祖先,这种情况第一个结点是两个结点的共同祖先;第三个结点是两个结点的共同祖先。算法:递归遍历每个结点,如果当前结点是空结点,返回NULL,如果当前结点等于两个结点中的一个,返回当前结点指针递归遍历当前结点的所有子树,返回n个结点指针,如果只有一个指针非NULL,说明两个结点都在那棵子树中,返回那棵子树的指针,如果有两个指针非NULL,说明当前结点是这两个结点的共同祖先,返回当前结点指针。 阅读全文

网易游戏笔试题─两个圆相交,交点是A1,A2。现在过A1点做一直线与两个圆分别相交另外一点B1,B2。 B1B2可以绕着A1点旋转。问在什么情况下,B1B2最长

2012-06-22 20:57 by iamzhaiwei, 294 阅读, 0 推荐, 收藏, 编辑
摘要:两个圆相交,交点是A1,A2。现在过A1点做一直线与两个圆分别相交另外一点B1,B2。B1B2可以绕着A1点旋转。问在什么情况下,B1B2最长?设两个圆的圆心分别为O1,O2。作O1C垂直于B1B2,O2D垂直于B1B2。|B1B2| = |A1B1| + |A1B2| = 2|A1C| + 2|A1D|=2|CD||CD| ^2 = |O1O2|^2 - (|O1C|-|O2D|)^2当|O1C|=|O2D|即B1B2平行于O1O2时,|B1B2|最大。 阅读全文

面试题─用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列

2012-06-22 20:12 by iamzhaiwei, 441 阅读, 0 推荐, 收藏, 编辑
摘要:用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列,如:512234、412325等,要求:"4"不能在第三位,"3"与"5"不能相连。// str: 字符串 // begin: 字符串第一个字符的索引 // end: 字符串最后一个字符的索引 // cnt: 统计全排列的数目,调用之前赋值为0 void string_full_permutation_containing_duplicate_char(char *str, int begin, int end, int &cnt) { if (be 阅读全文

雅虎面试题─有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除

2012-06-22 16:01 by iamzhaiwei, 501 阅读, 0 推荐, 收藏, 编辑
摘要:有双向循环链表结点定义为:struct node{ int data; struct node *front,*next;};有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除。用两个向量A_vec、B_vec分别存储链表A、B的元素值,将A_vec、B_vec排序,用类似归并排序的方法把A_vec、B_vec中值相同的元素放到向量common_vec中。分别遍历链表A、B,用二分查找法查看每个节点元素是否在common_vec中。// 链表结点 template <typename T> class dc_list_ 阅读全文