笔试题
文章平均质量分 71
ivokky
这个作者很懒,什么都没留下…
展开
-
前缀、中缀、后缀表达式及其相互转化的Java实现
一、中缀表达式转换为前缀、后缀表达式给个中缀表达式:a+b*c-(d+e) 首先根据运算符的优先级给所有运算单位加括号:((a+(b*c))-(d+e)) 将运算符号移动到对应括号的前面然后去掉所有括号就转换为前缀表达式: -( +(a *(bc)) +(de)) -> -+a*bc+de 将运算符号移动到对应括号的后面然后去掉所有括号就转换为后缀表达式:原创 2013-10-12 09:00:58 · 2434 阅读 · 0 评论 -
卡特兰数
1.什么是卡特兰数卡特兰数的递归公式是:F(n)=∑(k=1,2...n)F(k-1)*F(n-k)=∑(k=0,1,2...n-1)F(k)*F(n-k+1)卡特兰数的一般公式是:F(n)=C(2n,n)/(n+1)2.推导一般公式引例: ①已知有编号为1到n的n个元素,将它们顺序入栈,请问共有多少种出栈序列? ②有一个n*n的棋盘,从左下角走到右上角而不穿原创 2013-05-03 13:01:01 · 1204 阅读 · 0 评论 -
二叉树(二)
一、判断一个二叉树A中是否包含另外一棵二叉树B思路:首先在A中找到与B的根节点值一样的节点R,然后判断A中以R为根节点的子树是不是包含二叉树B。bool ifContains(BinaryTreeNode * treeA,BinaryTreeNode * treeB){ bool result = false; if(treeB == NULL) res原创 2013-05-20 21:11:19 · 635 阅读 · 0 评论 -
前序、中序、后序遍历的多种非递归实现
我们先看看用前序递归如何访问整棵树:先访问跟节点,然后访问左节点,再访问右节点。如果不用递归,那该怎么做呢?仔细看一下递归程序,就会发现,其实每次都是走树的左分支(left),直到左子树为空,然后开始从递归的最深处返回,然后开始恢复递归现场,访问右子树。其实过程很简单:一直往左走 root->left->left->left...->null,由于是前序遍历,因此一遇到节点,便需要立即访问;由原创 2013-09-09 09:06:08 · 1172 阅读 · 0 评论 -
链表(二)
一、复制复杂链表已知一个复杂链表,每个节点有一个指针pNextt指向下一个结点,同时它还有一个指针pSibling指向链表中的任意一个结点或者NULL。实现一个函数实现这个复杂链表的复制。复杂链表:struct ComplexLinkNode{ int value; ComplexLinkNode * pNext; ComplexLinkNode * pSi原创 2013-05-15 13:20:28 · 535 阅读 · 0 评论 -
数组
一、数组与指针int data1[] = {1,2,3,4};sizeof(data1) = 16;int * data2;sizeof(data2) = 4; 当数组作为参数传递时,它会退化为指针:int getSize(int[] data3){return sizeof(data3);}getSize(data1) = 4;二、二维数组的查找原创 2013-05-08 22:11:13 · 823 阅读 · 0 评论 -
二叉树(一)
一、已知某二叉树的前序遍历结果和中序遍历结果,请重构该二叉树。解题思路:根据前序遍历第一个值可以得到根节点,然后在中序遍历中找到跟节点,位于该节点前的值组成二叉树的左子树,位于该节点后的值组成二叉树的右子树。然后递归构造左子树和右子树。函数的参数和返回值:组成某个子树需要一串数值,我们需要知道这串数值在前序遍历序列和中序遍历序列中的初始下边和终点下标,该函数返回该子树的根节点指针。代码原创 2013-05-04 20:57:15 · 520 阅读 · 0 评论 -
链表(一)
链表:struct ListNode{ int value; ListNode * next;}一般链表要注意的特殊输入是链表为空,链表只有一个结点等。一、在链表末尾添加一个节点void addToTail(ListNode ** pHead,int value){ ListNode newListNode = new ListNode(); newListNode ->原创 2013-05-10 13:15:17 · 651 阅读 · 0 评论 -
栈
一、用两个栈实现队列一般方法:stack1和stack2分别为两个栈,stack1作为存储栈,stack2作为临时缓冲区。入栈时元素直接放入stack1中,出栈时先将stack1中元素倒入stack2,出栈stack2第一个元素,然后把stack2中元素倒回stack1。将stack1中元素倒入stack2中时可以剩下最后一个直接作为结果弹出,这样就少一次入栈和出栈操作。改进方法:入栈时元原创 2013-05-04 22:48:32 · 601 阅读 · 0 评论 -
C/C++的字符串和JAVA的String对象
1.关于C/C++的字符串与JAVA中的String对象基础知识①char str1[] = "hello world"; char str2[] = "hello world"; str1 != str2; //str1和str2是两个字符串数组,我们会为它们分别分配两个长度为12个字节的,他们是两个初始地址不同的数组,故str1和str2不同;②char * st原创 2013-05-09 14:09:42 · 805 阅读 · 0 评论 -
旋转数组找最小值
问题:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素,例如数组{3,4,5,1,2}为数组{1,2,3,4,5}的一个旋转,该数组的最小值为1。解题思路:一个递增数组经旋转后分为两部分,它们都是递增的数组,第一个子数组的第一个元素不小于第二个子数组的最后一个元素,我们要寻找的是第一个子数组最后一个元素的下一个元素或第二原创 2013-05-05 11:21:00 · 772 阅读 · 0 评论 -
二叉树笔试题
转自:http://blog.csdn.net/walkinginthewind/article/details/7518888树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决转载 2013-05-03 19:30:43 · 636 阅读 · 0 评论 -
兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素
用运行速度最优的方法从LinkedList列表里删除重复的元素,例如A->B->BB->B->C,返回A->B->BB->C。考试的时候没完全想明白,考完又想了想,其实还是蛮简单的。思路很简单:利用一个Set存放LinkedList中的元素,在迭代的过程中,判断当前元素是否在Set中出现过,如果出现过就删除,也就是说我们在遍历的过程中进行删除操作,所以这里要用到ListIterator,而不能原创 2013-10-12 09:18:15 · 2641 阅读 · 0 评论