摘要:
1) 双链表在最前端和最后端各设置一个哑节点。这两个节点分别称为头结点和尾节点。头结点的next指向首节点,首节点的prev指向头结点。头结点其他域为null。尾节点的prev指向末节点,末节点的next指向尾节点。尾节点其他域为null。 在链表为空时,头结点和尾节点已经存在了,并且此时头结点的n 阅读全文
摘要:
链表 链表是使用一段任意的存储单元存储线性表(元素之间是一对一的关系,除了第一个和最后一个元素之外)元素的数据结构,链表有两个基本单元组成,由于是不刻意使用连续的存储空间存储元素,所以无法使用物理上的相邻来表示线性表的对应关系,所以就需要创建类结构Node,其中除了表示元素数据的字段之外还需要维护一 阅读全文
摘要:
可以仿照利用数组实现栈的过程,使用数组实现队列。以front指向队首元素,值始终为数组首元素a[0]。出队时,front保持不变,删除队首元素,其余元素依次向前移动,时间复杂度是O(n)。入队时,根据队列大小将元素存储到相应位置。上述实现因为不断移动元素,效率太低。因此以下使用环形数组的形式来构造队 阅读全文
摘要:
我们平常书写的四则运算表达式属于中缀表达式,形式为"9+(3-1)*3+10/2",因为所有的运算符号都在两操作数之间,所以称为中缀表达式。我们使用中缀表达式来计算表达式的值,不过这种形式并不适合计算机求解。接下来,我们将中缀表达式转化为后缀表达式,所谓的后缀表达式就是操作符位于操作数后面的不包含括 阅读全文
摘要:
1)有些java文件上显示“红色小j”,如图所示 ,意思是“不可编译”,原因是Module未导入或者没有标记Module下"Sources"一栏src文件夹为Sources。(https://www.zhihu.com/question/37151750)。 阅读全文
摘要:
练习不同的算法时,如果不断的创建工程未免过于麻烦,可以使用在一个工程下创建多个Module的方式,编写多种不同的算法,这些模块互相独立,都有一个入口函数(main),并且,对于创建好的Module,如果希望在另外一台机器上打开,可以在项目配置中选择“导入Module”。在一个项目中创建多个Modul 阅读全文
摘要:
1)编写程序,求解a^b。其中b是正整数。 方法1. 这种使用连乘计算幂值的算法,复杂度是O(n)。不过如果将连乘拆分为若干相乘的表达式就可以减少做乘法的次数,自然也能提高算法效率。 方法2:快速幂计算 以a^10为例,一般方法是a^10=a*a*a*a*a*a*a*a*a*a,做9次乘法操作。为了 阅读全文
摘要:
今天用线性递归写了一段数组倒置的代码,结果提示溢出,源代码如下: 调试的时候发现,每次递归时,m和n的值并没有按照预期增减,反倒是保持不变。原因在于:前置自增和后置自增的区别。 前置自增和后置自增:虽然两者都是对操作数加1,但是,前置自增返回加1后的结果,而后置自增的返回值仍然是原操作数。 修改后的 阅读全文
摘要:
A. 二叉查找树(Binary Search Tree),又称为有序二叉树,排序二叉树,满足以下性质: 1)没有键值相等的节点。 2)若左子树不为空,左子树上节点值均小于根节点的值。 3)若右子树不为空,右子树上节点值均大于根节点的值。 二叉查找树中对于目标节点的查找过程类似与有序数组的二分查找,并 阅读全文