一、              单项选择题(在每小题的四个备选答案中选出一个正确的答案,并将其号码填在题干后的号码内,每小题2分,共10分)


1.
一个栈的输入序列为1234,下面哪一个序列不可能是这个栈的输出序列?(   
A. 1
324
B. 2
341
C. 4
312
D. 3
421

2.
下列排序方法中,哪一种方法的比较次数与纪录的初始排列状态无关?(   
A. 
直接插入排序
B. 
起泡排序
C. 
快速排序
D. 
直接选择排序

3.
n个记录的文件进行二路归并排序,总的时间代价为
A. O
nlog2n
B. O
n2
C. O
log2n
D. O
n

4.
若一棵二叉树具有10个度为2的结点,则该二叉树的度为0的结点个数是(   
A. 9
B. 11
C. 12
D. 
不确定

5.
下面关于B树和B+树的叙述中,不正确的是
A. B
树和B+树都是平衡的多分树
B. B
树和B+树都是可用于文件的索引结构
C. B
树和B+树都能有效地支持顺序检索
D. B
树和B+树都能有效地支持随机检索

二、              填空题(每空2分,共20分)

1.
从逻辑结构看,线性表是典型的         ,树是典型的         

2.
设有二维数组A[0..9,0..19],其每个元素占两个字节,第一个元素的存储地址为100,若按行优先顺序存储,则元素A[6,6]的存储地址为         ,按列优顺序存储,元素A[6,6]的存储地址为         

3.
若按层次顺序将一棵有n个结点的完全二叉树的所有结点从1n编号,那么当i          且小于n时,结点I的右兄弟是结点         ,否则结点i没有右兄弟。

4.
求具有最小带权外部路径长度的扩充二叉树的算法称为         算法。堆排序中建堆的方法称作         

5.6
B树中,每个结点至多包含         个关键码,除根和叶结点外,每个结点至少包含         个关键码。

三、              简答题(每小题6分,共18分)

1.
请简述散列函数在散列法存储中的作用,并举出一个散列函数的例子。

2.
请简述散列法存储中处理碰撞(冲突)的两类基本方法。

3.
请简述负载因子的定义,为什么说负载因子是散列法存储的一个重要参数?

四、              求解下列问题(每小题6分,共30分)

1.
设待排序文件的关键码为(512,275,908,677,503,765,612,897,154,170)以第一元素为分界元素进行快速排序(按关键码值递增顺序),请给出一趟扫描后的结果。

2.
请画出下面的树所对应的二叉树。
 
3.
从一棵空的二叉排序树开始,将以下关键码值依次插入:25,13,15,31,7,20,37,请画出插入全部完成后的二叉排序树。

4.
请画出下面带权图的一棵最小生成树。
 
5.
对于下面的稀疏矩阵
 
1
)画出其三元组法存储表示。
2
)画出其行—列法(十字链表法)存储表示。

五、              算法题(6分)
有一个链接方式存储的线性表,表中每个结点包括两个指针,其结点用PASCAL语言描述如下:
TYPE  pointer=
node;
       node=RECORD
              info:datatype;
              link1,link2:pointer
            END;
其中link1是指向结点的下一个结点的指针,link2是指向结点的前一个结点的指针,如图所示。
 
p
q都是pointer类型的变量,现要将q所指的新结点插入表中p所指结点的前面(说明:p所指的不是链表的第一个结点)。请用PASCAL语句写出该插入的关键步骤。(部要求写完整的算法,只要求用几个语句写出关键步骤。)

六、              算法填空和分析(共16分)
下面是用PASCAL语言编写的二分值插入排序算法,该算法对排序码为整数的线性表进行升序排序。
TYPE  node=RECORD
               key:integer;
               info:datatype
            End;
       list=ARRAY[1..max] OF node;
PROCEDURE binarysort (VAR R: list; n: integer);
VAR temp :node ;
    low,m,high,I,j: integer;
BEGIN
    FOR I:=2 TO n DO
       BEGIN
          temp := R[ i ];
          low :=1;    high := i-1;
          WHILE       
       DO
             BEGIN
                m :=(low+high) DIV 2;
                IF       
    
                THEN high :=m-1
                ELSE       
    
             END;
          FOR j := i-1 DOWNTO       
       DO
             R[j+1] := R[j];
                
    
      END;
END;
1.
请将算法的空缺处应填入的正确内容写在下面。(10分)






2.
设待排序的记录数n=7,当排序码的初始排列顺序分别为(15,25,35,45,55,65,75)和(75,65,55,45,35,25,15)时,请说出排序过程中对排序码所进行的总的比较次数分别是多少?(假定算法中取中项的整数除法采用小数截断的方法。)(6分)