一、(15分)
  回答下列各题,并简要说明理由,每题3
1、什么是线形表?线形表的各元素类型是否必须是同一类型?为什么?
2、线形表有两种不同的继承形式,顺序的和链接的存储结构,
    在使用时,如何确定使用哪种存储结构?
3、给出一个二叉树的前序和中序遍历序列,要求写出后序遍历序列。
4、(记不清楚具体数字了,大概的数字把)
    一个文件用B+树做索引,给定文件大小2000000 B,每个页块大小为4000 B,
   
每个指针大小为5 B。每个记录是200 B,其中关键码为5 B.
   
问:
       1)应采用多少阶B+?
       2)
该文件索引块数目。
5、下列哪些可以做Hash函数?哪些效果不好?哪些效果好?
    其中,nHash表的表长;Random(n)可以产生一个0---n=1 的随机数;
    p(n)为小于n的素数。
       1Hash(key) = key/n;
       2) Hash(key) = 1;
       3) Hash(key) = (key + Random(n)) % n;
       4) Hash(key) = key % p(n);

二、(5分)
    证明:一棵二叉树的前序,中序,后序遍历序列中,叶结点的相对位置是不变的
三、(15分)
    1给定一组关键码,要求依次插入建立一棵AVL树,大约12个关键码左右,
       (和03年那个真题只是关键码的不同)
        需要旋转的时候,要求标出旋转的类型:左单旋,右单旋,先左后右双旋,先右后
左双旋。
    2)在建成的这棵AVL树上,依次删除关键码****(四个),要求:
           如果需要旋转,那要标出旋转类型;用中序的直接前驱代替关键码
四、(15分)
    1)将书上284页的Dijkstra算法挖去5个空,让添。(5分)
       具体字母有差别,但是确实就是那个算法,我按照书上的来了。
         void ShortestPath(Graph G, int v, int n)
         {
              for (int i = 0; i < n; i++){  //n
为图的顶点数目
                   dist[i] = Edge[v][i];
                   s[i] = 0;
                   if (i != v && dist[i] < MaxNum)
                        1
;
                   else
                        path[i] = -1;
              }
              s[v] = 1;
              dist[v] = 0;
              for (int i = 0; i < n - 1; i++){
                   float min = MaxNum;
                   int u = v;
                   for (int j = 0; j < n; j++){
                        if( 2
&& dist[j] < min){
                              u = j;
                              min = dist[j];
                        }
                        }
                    }
               3
空;
               for (int w = 0; w < n; w++){
                   if( 4
&& Edge[u][w] < MaxNum && dist[u] + Edge[u][w] < dist
[w]){
                        dist[w] = dist[u] + Edge[u][w];
                        5
空;
                   }
               }
           }
     2
)(10分)
         定义了一个Max{***********},即顶点i到其余各顶点的最短路径的值,
         让写一个算法求这个Max{***********}的最小值。