数据结构复习题
1. 已知二叉树中,叶子节点数为40 ,仅有一个孩子结点的个数20,侧总结点的个数为::99个
4, 图常用的两种遍历算法是:深度优先遍历和广度优先遍历
5, N个顶点的有向图最多有n(n-1)条弧
6, 在有向图的邻接矩阵上由第i行节点可得到第__i__个节点的出度,由第j列可得到第__j_个节点的入度。
7, 在一个元素为N的数组中第I个元素之前插入一个元素(1=<i<=n+1)需要移动__n+1-i____个元素
8, 头结点地址引用(指针)为L的循环单链表空表的判断条件是 ___;
9, 一颗哈弗曼树共有19个节点 ,其中叶子节点个数是_10_;
10, 要删除拥有最大值的数据项需要遍历__1_次单链表;
11, 图的遍历过程中,选择出发顶点V0的次数为该图的_连通分量__的个数;
12, 从连通图的定义出发 ,树是 一个没有 _回路或环__的连通图;
13, 含N个顶点的无向连通图中至少含有__(n-1)__条边
二 选择题
1, __储存密度高_是顺序存储方式的优点;
2, 在含有N个元素的数组中在任意一元素前插入一个元素所需移动节点的平均次数_n/2_;在任意一元素前删除一个元素所需移动节点的次数是(n-1)/2;
3, 循环链表的主要优点是/____;
4, 一个栈的输入序列为1,2,3,4,5 测下列序列中不可能的输出序列是5,4,2,3,1;
5, 从队列中删除第I个元素 不是队列的基本运算的是(答案B)
6, 下列程序 的时间复杂度是;o(n);
X=n;
While(x>1){
System.out.println(x);
X--;
}
7, 某二叉树上的先序遍历和后序遍历正好相反,则该二叉树一定是:高度等于节点数的二叉树;
8, 用邻接矩阵存储图 占用的存储空间大小只与图中结点个数有关 ,而与边数无关;
9, 栈若用链式存储结构,要求内存中可用的存储单元的地址_连续不连续都可以__
12, 高度为K的二叉树(假设根是第一层)的最大的结点数为_2的K次方减1 ;
13, 任何一个无向连通图的最小生成树:有一颗或多颗;
14, 在一个有向图中。所有顶点的入度和等于 所有顶点的出度之和的__1__倍
15, 已知二叉树的先序序列和中序序列如下:画出该二叉树:先序遍历:ABDFKICEHJG;后序遍历:DBKFIAHEJCG;
16, 假设用于通信的电文由字符集
{A B C D E F G}
{0.33,0.15,0.10,0.08,0.1,0.20,0.04}构成,它们在电文中出现的频度是{0.33,0.15,0.10,0.08,0.1,0.20,0.04}
(1)为这7个字符设计哈弗曼编码;
A, B , C, D, E ,F ,G
11 100 010 1010 011 00 1011
(2)为这7这字符进行等长编码,至少需要几位二进制数?哈弗曼编码比等长编码总长度压缩多少?
至少需要3位二进制数
压缩了=(3-2.59)/3 =13.7%
17, 设有一组数据(C0,C1,C2.......Cn-1)存在一个一维数组A【arraysize】的前几个数组元素位置((arraysize)=n)。请编写一个方法将数组数据原地倒置,即将数组的钱前几位原址内容置换为(En-1......E0)
Void inverse(int[] A){
Int n=A.lengeh;
Int m=n/2;
Int temp;
For(int i=0;i<m;i++){
Temp=A[i];
A[i]=A[n-1-i];
A[n-1-i]=temp;
}
}
18, 计算图的连通分量的个数;
//访问节点的方法:
Public class Visit{
Public void print(Object item){
System.our.print(item+” ”);
}
}
//深度优先遍历的方法并计算访问节点的次数:
private void depthFistSearch(int v,boolean[] visited, visit vs)throws Exception{
int count=0;
vs.print(getValue(v));
visited[v]=true;
int w=getFirstNeighbor(v);
while(w!=-1){
if(!visited[w])
depthFirstSearch(w,visited, vs);
w=getNestNeighbor(v,w);
}
return Count++;
}
说明:调用最小生成树,深度优先遍历。访问节点的次数
19, 求连个正整数N和M的最大公约数的递推定义式
为gcd(n,m)
public class RevTest {
static int Gcd(int n,int m){
if(n<m)
return Gcd(m,n);
if(m==0)
return n;
return Gcd(m,n%m);
}
public static void main(String[] args) {
System.out.println(Gcd(48,32));//Gcd()被调用3次
}
}
20, 统计该二叉树中叶子节点的个数
Public int countLeaves( BiTreeNode t ){
If( t!=null ){
If (t.getLeft( ) ==null && t.getRight( )== null );
Return 1 ;
Int leftCount =0, rightCount = 0 ;
If (t.get.left ( ) !=null )
Leftcount = countleaves( t.getLeft( ) );
If(t.getright( ) != null )
Rightcount=countLeaves( t.getRight( ) );
Return leftcount +rightcount;
}
Return 0;
}