当BST每层仅有一个结点时,其查找算法退化成(),ASL上升为()。
A.顺序查找、(n+1)/2
B.顺序查找、n
C.折半查找、(n+1)/2
D.折半查找、n
A.顺序查找、(n+1)/2
B.顺序查找、n
C.折半查找、(n+1)/2
D.折半查找、n
在二叉树中查找值为x的结点,试编写算法(用C语言)打印值为x的结点的所有祖先,假设值为x的结点不多于一个,最后试分析该算法的时间复杂度。
若线性表中各结点的查找概率不等,则可用如下策略提高顺序查找的效率:若找到指定的结点,则将该结点和其前驱(若存在)结点交换,使得经常被查找的结点尽量位于表的前端。试对线性表的顺序存储结构写出实现上述策略的顺序查找算法。
解题思路:本题就是在一个二叉链表中查找指定的结点x的过程。可以利用二叉树的任意一种遍历方法进行查找。这里利用先序遍历方法,首先判断当前结点是否是要查找的结点,如果是,则查找成功,返回结点的地址;如果不是,则分别到它的左子树和右子树中进行查找。
任意一棵二叉排序树的平均查找时间都小于用顺序查找算法搜索同一结点的顺序表的平均查找时间。( )
稀疏矩阵相加。两个稀疏矩阵A和B采用十字链表方式存储,计算C=A+B,C采用十字链表方式存储。
算法分析:根据矩阵相加的法则,C中的非零元素cij只可能有3种情况:aij+bij,aij(bij=0),bij(aij=0)。因此,当B加到A上时,对A的十字链表来说,或者是改变结点的val域值aij+bij≠0,或者不变(bij=0),或者插入一个新结点(aij=0),还可能是删除一个结点(aij+bij=0)。整个运算可从矩阵的第一行逐步进行。对每一行都从行表头出发分别找到A和B在该行中的第一个非零元素结点后开始比较,然后按以下4种不同情况分别处理(假设pa和pb分别指向A和B的十字链表中行值相同的两个结点)。
设有一线性表e=(e0,e1,e2,…,en-1),其逆线性表定义为e=(en-1,…,e2,e1,e0)。请设计一个算法,将用带头结点和不带头结点的单链表两种方法表示的线性表置逆,要求逆线性表仍占用原线性表的空间。