摘要: 题目:两个栈实现队列分析:假设两个栈分别为stk1,stk2;队列的两个操作为入列和出列入列操作:是对栈stk1的入栈操作;出列操作:if stk2为空 { stk1全部出栈,分别顺序入栈到stk2中 }assert(stk2不为空)stk2出栈 阅读全文
posted @ 2012-10-01 21:52 logzh 阅读(186) 评论(0) 推荐(0)
摘要: 1 、链表相邻元素翻转2 、题目:输入一个链表的头结点,反转该链表,返回反转后链表的头结点;LNode* ReverseLinkList(LNode* head)//带头结点{ if(head == NULL)//注意 return head; LNode* p=head->next; LNode* temp=NULL; LNode* trail=NULL; while(p != NULL) { //4句 temp=p; p=p->next; temp->next=trail; tra... 阅读全文
posted @ 2012-10-01 21:40 logzh 阅读(238) 评论(0) 推荐(0)
摘要: 题目:把字符串前n个字符移到字符串的尾部。如:abcdef左旋转2位得到字符串cdefab;分析得:左旋转其实为3个反转操作!代码如下:(主要const的使用)const在*左边修饰指针指向的内容,即内容不能修改const在*右边修饰指针本身,即指针本身不能修改即//左内容右本身char* ReverseString(char * const pStart, char * const pEnd)//反转字符串{//const不修改指针 //左内容右本身 char *pS=pStart; char *pE=pEnd; if(pS != NULL && pE != NULL) .. 阅读全文
posted @ 2012-10-01 21:31 logzh 阅读(270) 评论(0) 推荐(0)
摘要: 题目:输入一个整数n,求n的2进制表示中1的个数分析可得:n&(n-1)的操作是将n的2进制表示中最右边的1变成0;所以能得到对应的代码:int numOf1(int n){ int count=0; while(n) { count++; n=n&(n-1); } return count;}同理判断n是不是2的整数次幂return !(n&(n-1)); 阅读全文
posted @ 2012-10-01 21:25 logzh 阅读(248) 评论(0) 推荐(0)
摘要: 跳台阶问题:实际是一种Fibonacci序列问题Fibonacci序列问题(程序员面试题100题第16题——O(logN)求Fibonacci数列),可以转化为矩阵乘法问题,或者记忆数组问题;代码略。 阅读全文
posted @ 2012-10-01 21:08 logzh 阅读(195) 评论(0) 推荐(0)
摘要: 题目:输入两个字符串(整数或字母),第一个表示为栈的push顺序,判断另外一个是不是对应的pop序列;为简单起见,我们假设push序列的任意两个字符不相等。代码:bool IsPossiblePopOrder(const char* pPush,const char* pPop){ stack<char> stk; const char* p=pPush; const char* q=pPop; if(strlen(p) != strlen(q)) { return false; } while( *p!='\0') { ... 阅读全文
posted @ 2012-10-01 21:05 logzh 阅读(290) 评论(0) 推荐(0)
摘要: 题目:输入一个正数n,输出所有和为n连续正数序列。例如输入15,输出1 2 3 4 5、4 5 6、7 8void PrintContinuesSequence(int small, int big){ for(int i=small; i<=big; ++i) cout << i <<" "; cout << endl;}void FindContinuesSequence(int n){ if (n<3) return; int small=1; int big=2; int middle=(1+n)/2;//用于判断结束 阅读全文
posted @ 2012-10-01 19:59 logzh 阅读(143) 评论(0) 推荐(0)
摘要: 题目:输入一字符串,输出字符串的所有排列分析:我们以三个字符abc为例。首先我们固定第一个字符a,求后面两个字符bc的全排列。当bc的排列求好之后,这就是一部分解;现在我们把第一个字符a和后面的字符b交换得到bac,固定第一个字符b,求后面两个字符ac的全排列。当ac的排列求好之后,这是另外一部分解;接着我们该把c放在第一个位置了,为了确保这次c是和原先处于第一位置的a交换,必须把b和a交换回来,得到abc,然后再把c交换到第一位置得到cba,固定第一个字符c,求后面两个字符ba的全排列。当ba的排列求好之后,这是另外一部分解;三部分解组成所有的解。又如abcdabcda{bcd的排列}//得 阅读全文
posted @ 2012-10-01 19:28 logzh 阅读(493) 评论(0) 推荐(0)
摘要: 来自百度百科http://baike.baidu.com/view/536145.htmstatic成员必须在类外初始化C++中的static1、面向过程的static静态全局变量有以下特点: 该变量在全局数据区分配内存; 未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0); 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;全局变量和全局静态变量的区别: 1)全局变量是不显式用static修饰的全局变量,但全局变量默认是动态的,作用域是整个工程,在一个文件内定义的全局... 阅读全文
posted @ 2012-10-01 17:13 logzh 阅读(286) 评论(0) 推荐(0)
摘要: bool isEven_(int n)//是否是偶数{ return (n&1)==0;}int gcd(int x, int y)//注意递归的基准情况和x,y同为偶数的情况{ if(x<y) { return gcd(y,x); } if(y==0) return x; //以上两步为递归算法中的基准情况!! if(isEven_(x)&&isEven_(y)) { return (gcd(x>>1,y>>1))<<1;//x>>1 x/2 }else if(isEven_(x)&&!isEve. 阅读全文
posted @ 2012-10-01 16:27 logzh 阅读(269) 评论(0) 推荐(0)
摘要: 思想完全是采用快速排序:bool isEven_(int n)//是否是偶数{ return (n&1)==0;}void swapOddEven(int arr[], int left, int right){ int i=left; int j=right; int temp=arr[left]; if(left > right) { return ; } while(i<j) { while(i<j && isEven_(arr[j])) j--; arr[i]=arr[... 阅读全文
posted @ 2012-10-01 16:25 logzh 阅读(196) 评论(0) 推荐(0)