1.带头结点的单循环链表的头指针为head,则判断该链表是否为空的条件是head->next==head
2.不需要判断栈是否为空的是 进栈
3.对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
4.m个叶结点的哈夫曼树中,其结点总数为2m-1
5.用n表示图中顶点数目,有n(n-1)/2条边的无向图称为完全图。
6.在带权有向图中求两个结点之间的最短路径可以采用的算法是迪杰斯特拉(Dijkstra)算法
7.一棵初始时为空的二叉树中,依次插入键值序列50,72,43,85,75,20,38,45,65,60,构造对应的二叉排序树以后,查找元素60要进行的比较次数是4
8.快速排序属于交换排序
9.C程序中,将对称矩阵A[n][n]的下三角元素压缩存储到n(n+1)/2个元素的一维数组M中,设a[i][j](i≥j)存放在数组M[k]中,则k的值(用i,j表示)为__(i+1)i/2+j_
二叉排序树(Binary Sort Tree)又称二叉查找树,亦称二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
无向图邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的度。
有向图邻接矩阵中第i行非零元素的个数为第i个顶点的出度,第i列非零元素的个数为第i个顶点的入度,第i个顶点的度为第i行与第i列非零元素个数之和。
堆
是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:
堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全树。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
" ki<=k2i,ki<=k2i+1;或ki>=k2i,ki>=k2i+1.(i=1,2,…,[n/2])"
若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,
完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。
由此,若序列{k1,k2,…,kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。
散列查找
在进行查找时,在记录的存储位置与它的关键字之间建立一个确定的对应关系h,以线性表中每个元素的关键字K为自变量,
通过函数h(K)计算出该元素的存储位置,我们将h函数称为散列函数或哈希函数。h(K)的值称为散列地址或哈希地址。
如何将一棵树转换成二叉树?
解答:
1. 将 节点的孩子 放在左子树;
2. 将 节点的兄弟 放在右子树。
延伸:
任何一棵树都可以表示成二叉树,并不是任何一棵二叉树都可以表示成树。那么树多还是二叉树多?
1. 任何一棵树都可以表示成二叉树,结合以上题目很容易理解。
2.不是任何一棵二叉树都可以表示成树:
当根节点包含右子树的时候,就无法表示成树了。
3. 树多还是二叉树多的问题:
二叉树也是树的一种,如果按照包含关系来说,树肯定包含二叉树了,树多一些
散列函数H(key)=key mod 11(mod表示求余运算),给出键值序列为66,13,41,15,44,6,68,17,26,31,39,46,
用链地址法解决冲突,试画出相应的散列表,并计算在等概率情况下查找成功时的平均查找长度。
散列表的平均查找长度
首先要先知道有几个排序数,然后将这些排序数列出来,标出每个排序数按哈希函数查找后需要几次才能查找到的次数,
然后将这些次数相加后的总和除以排序数的个数就是散列表的平均查找长度。查找不成功的就是将除以排序数个数变成除以表长就行了,呵呵。
直接选择排序
直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:
第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,
在直接选择排序中,共需要进行n-1次选择和交换,每次选择需要进行 n-i 次比较 (1<=i<=n-1),而每次交换最多需要3次移动,因此,总的比较次数C=1/2(n*n - n),
总的移动次数 3(n-1).由此可知,直接选择排序的时间复杂度为 O(n2) (n的平方),所以当记录占用字节数较多时,通常比直接插入排序的执行速度快些。
由于在直接选择排序中存在着不相邻元素之间的互换,因此,直接选择排序是一种不稳定的排序方法。