在O(1)时间删除链表结点
摘要:题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。函数的声明如下:void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted);分析:这是一道广为流传的Google面试题,能有效考察我们的编程基本功,还能考察我们的反应速度,更重要的是,还能考察我们对时间复杂度的理解。注意函数的第一个参数pListHead是一个指向指针的指针。例如,当我们往一个空链表中插入一个结点时,新插入的结点就是链表的头指针。由于此时会改动头指针,因此必须把pHead参数设为指向指针的指针,否则出了这个函数pHead仍然是一个空指针。在链表中删除一
阅读全文
posted @
2013-09-09 11:48
猿人谷
阅读(791)
推荐(0)
总结---1
摘要:1.const与 #define有什么不同?答:C++中可以使用const定义常量,也可以用#define定义常量,但是前者比后者有更多的优点①const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只是进行字符替换,没有做类型安全检查,并且在字符替换中可能会产生意料不到的错误(边际效应)②有些集成化的调试工具可以对const常量进行调试,但是不能对宏进行调试即在C++中 const可以完全替换宏常量扩展:typedef和#define的区别:http://www.cnblogs.com/heyonggang/p/3199216.html2.头文件中的ifnd
阅读全文
posted @
2013-09-08 15:17
猿人谷
阅读(577)
推荐(0)
将一个数组中的奇元素全部移到数组的前半部分,即将奇偶元素分开
摘要:将一个数组中的奇元素全部移到数组的前半部分,即将奇偶元素分开?需要调整元素的顺序。先判断数组中的一个元素的奇偶性,如为奇数就往后移。如何判断一个元素的奇偶性?[cpp] view plaincopy//判断元素的奇偶性boolisEven(intdata){return((data&1)==0?true:false);}测试如下:[cpp] view plaincopy#include//判断元素的奇偶性boolisEven(intdata){return((data&1)==0?true:false);}intmain(){inti=3;if(isEven(i)){print
阅读全文
posted @
2013-09-08 15:02
猿人谷
阅读(1772)
推荐(0)
C++笔试题
摘要:来源:http://www.nowamagic.net/librarys/veda/detail/5191. 以下三条输出语句分别输出什么?1charstr1[] ="abc";2charstr2[] ="abc";3constcharstr3[] ="abc";4constcharstr4[] ="abc";5constchar* str5 ="abc";6constchar* str6 ="abc";7cout > temp;5unsignedintconstsiz
阅读全文
posted @
2013-09-06 16:57
猿人谷
阅读(625)
推荐(0)
单链表反转的分析及实现
摘要:我先画一个单链表,这个单链表有4个元素。我的思路就是,每次把第二个元素提到最前面来。比如下面是第一次交换,我们先让头结点的next域指向结点a2,再让结点a1的next域指向结点a3,最后将结点a2的next域指向结点a1,就完成了第一次交换。第一次交换然后进行相同的交换将结点a3移动到结点a2的前面,然后再将结点a4移动到结点a3的前面就完成了反转。第二次交换第三次交换思路有了,那就可以写代码了。这里我们需要额外的两个工作指针来辅助交换。这个下面的步骤慢慢理解下,结合图片。注意结点之间的关系要先断再连。步骤:定义当前结点 current,初始值为首元结点,current = L->ne
阅读全文
posted @
2013-09-06 09:47
猿人谷
阅读(1591)
推荐(0)
***经典笔试题
摘要:一、 C/C++程序设计1、i++ const sizeof 类型转换 字节对齐与填充2、动态内存/虚函数 函数指针3、 拷贝构造函数/赋值函数4、 单链表反转5、 打印100以内的素数6、 位运算与嵌入式编程二、算法分析1、 数组循环移位2、 求二进制中1的个数
阅读全文
posted @
2013-08-30 20:36
猿人谷
阅读(274)
推荐(0)
Hanoi塔问题
摘要:说明:河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。解法:如果柱子标为ABC,要由A搬至C,在只有一个盘子时,
阅读全文
posted @
2013-08-25 12:22
猿人谷
阅读(477)
推荐(0)
二维数组的查找
摘要:题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍的规律。针对这个问题,我们不妨也从一个具体的例子入手。下面我们以在题目中给出的数组中查找数字7为例来一步步分析查找的过程。 我们发现如下规律:首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就
阅读全文
posted @
2013-08-16 14:31
猿人谷
阅读(834)
推荐(0)
实现两个N*N矩阵的乘法,矩阵由一维数组表示
摘要:实现两个N*N矩阵的乘法,矩阵由一维数组表示。先介绍一下矩阵的加法:1 void Add(int rows, int cols) 2 { 3 for(int i= 0;iusingnamespacestd;#definesize2intmulti(int*a,int*b,intN){inti,j,k,temp;int*c=(int*)malloc(N*N);for(i=0;i<N;i++){for(j=0;j<N;j++){temp=i*N+j;*(c+temp)=0;for(k=0;k<N;k++){*(c+temp)+=a[i*N+k]*b[k*N+j];...
阅读全文
posted @
2013-08-16 14:29
猿人谷
阅读(3243)
推荐(0)
C++/C#面试题
摘要:题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量)。请问:能不能同时用static和const修饰类的成员函数?分析:答案是不可以。C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时static的用法和static是冲突的。我们也可以这样理解:两者的语意是矛盾的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没
阅读全文
posted @
2013-08-16 10:31
猿人谷
阅读(552)
推荐(0)
经典C语言面试题
摘要:1.gets()函数问:请找出下面代码里的问题:#includeintmain(void){charbuff[10];memset(buff,0,sizeof(buff));gets(buff);printf("\nThebufferenteredis[%s]\n",buff);return0;}答:上面代码里的问题在于函数gets()的使用,这个函数从stdin接收一个字符串而不检查它所复制的缓存的容积,这可能会导致缓存溢出。这里推荐使用标准函数fgets()代替。2.strcpy()函数问:下面是一个简单的密码保护功能,你能在不知道密码的情况下将其破解吗?#includ
阅读全文
posted @
2013-08-14 14:33
猿人谷
阅读(484)
推荐(0)
找出一个数组中出现次数最大的数
摘要:描叙:一大堆数据里面,数字与数字之间用空格隔开,找出出现次数最多的一个数字的算法#includevoid FindMostTimesDigit(int *Src , int SrcLen){ int element , has = SrcLen; int MaxNum , TempCount = 0 , MaxCount = 0; int i , j , *result = new int[]; while(0 != has) { TempCount = 0; element = Src[has - 1]; for(j = has - 1 ; j >= 0 ; --j) { ...
阅读全文
posted @
2013-07-19 20:54
猿人谷
阅读(6050)
推荐(0)
求大于整数m且紧靠m的k个素数 及 判断一个数是否为素数的方法
摘要:题目: 请编写一个函数void fun(int m,int k ,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。 例如,若输入:17,5,则应输出:19,23,29,31,37。质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。 1 #include 2 #include 3 4 bool isPrime(int n) 5 { 6 for(int i = 2 ; i 2 #include 3 using namespace std; 4 5 bool isPrime(int n) 6 { 7 ...
阅读全文
posted @
2013-07-18 15:37
猿人谷
阅读(3797)
推荐(0)
技术怪题
摘要:有些公司的题真的是会让咱们大跌眼镜。不信,看下面一道题。int main(){if( ) { printf("Hello ");}else{printf("World !!!");}return 0;}在if里面请写入语句 使得打印出 hello world。解答:[cpp] view plaincopy#includeintmain(){if(!printf("hello"))//加入!printf("hello"){printf("Hello");}else{printf("Wor
阅读全文
posted @
2013-07-17 20:40
猿人谷
阅读(469)
推荐(0)
求子数组的最大和
摘要:分析:输入一个整形数组,数组里有正数也有负数,数组中一个或连续的多个正数,求所有子数组的和的最大值。当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。因此需采用DP思想,记录下当前元素之和(为其最优状态,既最大),将其与目前所得的最大和比较,若大于则更新,否则继续。状态的累加遵循这个过程:如果当前和小于0,则放弃该状态,将其归零。扩展:数对之差的最大值。 1 //求子数组的最大和 2 //利用的是dp的思想,依次遍历数组中的每个元素,把他们相加,如果加起来小于0,则 3 /
阅读全文
posted @
2013-07-17 19:59
猿人谷
阅读(968)
推荐(0)
实现两个N*N矩阵的乘法,矩阵由一维数组表示
摘要:实现两个N*N矩阵的乘法,矩阵由一维数组表示。先介绍一下矩阵的加法:1 void Add(int rows, int cols) 2 { 3 for(int i= 0;iusingnamespacestd;#definesize2intmulti(int*a,int*b,intN){inti,j,k,temp;int*c=(int*)malloc(N*N*sizeof(int));for(i=0;i<N;i++){for(j=0;j<N;j++){temp=i*N+j;*(c+temp)=0;for(k=0;k<N;k++){*(c+temp)+=a[i*N+...
阅读全文
posted @
2013-07-12 09:58
猿人谷
阅读(854)
推荐(0)
C++笔试题
摘要:转自:http://bbs.yingjiesheng.com/thread-37802-1-1.html1.已知strcpy 函数的原型是:char *strcpy(char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy答案:char *strcpy(char *strDest, const char *strSrc){if ( strDest == NULL || strSrc == NULL)return NULL ;if ( strDest == strS
阅读全文
posted @
2013-07-11 11:04
猿人谷
阅读(542)
推荐(0)
操作系统面试题(2)
摘要:1、线程与进程的区别联系2、进程通信方式有哪些?3、同步的方式有哪些?4、ThreadLocal与其它同步机制的比较5、进程死锁的条件第一题:(1)线程是进程的一个实体,一个进程可以拥有多个线程,多个线程也可以并发执行。一个没有线程的进程也可以看做是单线程的,同样线程也经常被看做是一种轻量级的进程。并且进程可以不依赖于线程而单独存在,而线程则不然。(2)进程是并发程序在一个数据集合上的一次执行过程,进程是系统进行资源分配和调度的独立单位,线程是进程的实体,它是比进程更小的能够独立执行的基本单元,线程自己不拥有任何系统资源,但是它可以访问其隶属进程的全部资源。(3)与进程的控制表PCB相似,线程
阅读全文
posted @
2013-07-04 21:51
猿人谷
阅读(1823)
推荐(0)
字符串倒序
摘要:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” 1 #include 2 #include 3 4 int main() 5 { 6 char str[]="abcde"; 7 int len = strlen(str); 8 char t; 9 for(int i = 0 ; i < len/2 ; i++)10 {11 t = str[i];12 str[i] = str[len-i-1];13 str[len-i-1] = t;14 }15 printf("%s\n...
阅读全文
posted @
2013-07-04 21:34
猿人谷
阅读(568)
推荐(0)
字符串反转问题
摘要:首先是我之前写的程序,同时这也是处理第一类的字符串反转问题,也就是输入This is a string.,输出为.gnirts a si sihT:#include #include /*我之前的这个代码,有一个很致命的BUG,在字符串长度为奇数的时候运行时正确的 *但是在字符串长度为偶数的时候运行却是错误的, *比如“ab”,str的地址为0x89,ptr的地址为0x8A,当str++,ptr--执行以后 *str和ptr都是不会相等的,也就是不会结束while循环!!!直到碰巧两者相等 *循环结束,但此时程序已经得不到原先想要的结果了!!! */void RevStr(char*str){
阅读全文
posted @
2013-07-04 20:49
猿人谷
阅读(892)
推荐(0)