数据结构练习题1401

注意事项:
1.该试卷中,凡使用到“图”的概念,皆不考虑顶点到其自身的弧或边,即以VR表示图中两个顶点之间关系的集合,若<vi,vj>∈VR,则vi≠vj。
2.该试卷中,凡使用“矩阵”概念处,行、列均从1开始计数。
3.该试卷中,使用到数字概念时,除指定进制外,均为10进制。

一、单项选择题(每题1分,共20分)

1.算法的时间复杂度与( )有关。
A.问题的规模
B.计算机硬件性能
C.编译程序的质量
D.程序设计语言

2.向顺序表中第i个元素之后插入一个新元素时,首先从_______开始向后的所有元素均要__________一个位置,接着把新元素写入___________上,最后,使线性表的长度________________。下面四个选项中( )全部符合要求。
A.i位置,向后移动,i位置,加1
B.i位置,向后移动,i+1位置,加1
C.i+1位置,向后移动,i+1位置,加1
D.i+1位置,向后移动,i位置,加1

3.若线性表最常用的操作是存取第i个元素及其前趋的值,则采用( )存储方式节省时间。
A.单链表
B.双链表
C.单循环链表
D.顺序表

4.栈操作的原则是( )。
A.先进先出
B.后进先出
C.只能进行插入
D.只能进行删除

5.某二叉树的中序遍历序列和后序遍历序列正好相反,则该二叉树一定是( )的二叉树。
A.空或只有一个结点
B.高度等于其结点数
C.任一结点无左孩子
D.任一结点无右孩子

6.若进栈序列为1,2,3,4,进栈过程中可以出栈,则( )不可能是一个出栈序列。
A.3,4,2,1
B.2,4,3,1
C.1,4,2,3
D.3,2,1,4

7.若用数组S[0..m]作为两个栈S1和S2的共同存储结构,对任何一个栈,只有当S全满时才不能作入栈操作。为这两个栈分配空间的最佳方案是( )。
A.S1的栈底位置为0,S2的栈底位置为m
B.S1的栈底位置为0,S2的栈底位置为m/2
C.S1的栈底位置为1,S2的栈底位置为m
D.S1的栈底位置为1,S2的栈底位置为m/2

8.循环链表L的尾结点p的特点是( )。
A.p->next==L
B.p->next==L ->next
C.p==L
D.p==L->next

9.串的长度是( )。
A.串中不同字母的个数
B.串中不同字符的个数
C.串中所含字符的个数,且大于0
D.串中所含字符的个数

10.已知广义表(( ),(a), (b, c, (d), ((d, f)))),则以下说法正确的是( )。
A.表长为3,表头为空表,表尾为((a), (b, c, (d), ((d, f))))
B.表长为3,表头为空表,表尾为(b, c, (d), ((d, f)))
C.表长为4,表头为空表,表尾为((d, f))
D.表长为3,表头为(()),表尾为((a), (b, c, (d), ((d, f))))

11.对称矩阵的压缩存储:以行序为主序存储下三角中的元素,包括对角线上的元素。二维下标为( i,j ),存储空间的一维下标为k,给出k与i, j (i<j)的关系k=( )(1<= i, j <= n , 0<= k < n*(n+1)/2)。
A.i*(i-1)/2+j-1
B.i*(i+1)/2+j
C.j*(j-1)/2+i-1
D.j*(j+1)/2+i

12.在有n个结点的二叉链表中,值为非空的链域的个数为( )。
A.n-1
B.2n-1
C.n+1
D.2n+1

13.一棵二叉树的顺序存储情况如下:

1  2  3  4  5  6  7  8  9  10  11  12  13  14  15
A  B  C  D  E  0  F  0  0  G   H    0   0   0   X

结点D的左孩子结点为( )。
A.E
B.C
C.F
D.没有

14.一棵“完全二叉树”结点数为25,高度为( )。
A.4
B.5
C.6
D.不确定

15.一个有向图,共有n条弧,则所有顶点的度的总和为( )。
A.2n
B.n
C.n-1
D.n/2

16.若表R在排序前已按键值递增顺序排列,则( )算法的比较次数最少。
A.直接插入排序
B.快速排序
C.归并排序
D.选择排序

17.下列排序算法中,( )排序在某趟结束后不一定选出一个元素放到其最终的位置上。
A.选择
B.冒泡
C.归并
D.堆

18.下列排序算法中,稳定的排序算法是:( )。
A.堆排序
B.直接插入排序
C.快速排序
D.希尔排序

19.堆排序的时间复杂度是( )。
A.O(n*n)
B.O(n*log n)
C.O(n)
D.O(log n)

20.广义表A=(a,b,c,(d,(e,f))),则Head(Tail(Tail(Tail(A))))的值为( );(Head与Tail分别是取表头和表尾的函数)
A.(d,(e,f))
B.d
C.f
D.(e,f)

二、判断题(每题1分,共10分,对的打√,错的打X)

(×) 1. 如果一个串中的所有字符均在另一串中出现,则说前者是后者的子串。
() 2. 已知指针P指向链表L中的某结点,执行语句P=P->next不会删除该链表中的结点。
(×) 3. 向顺序栈中压入元素时,是先移动栈顶指针,后存入元素。
() 4. 二叉树的先序遍历中,任意一个结点均处在其孩子结点的前面。
(×) 5. 邻接表只能用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。
() 6. 有向无环图必有拓扑序列。
() 7. 任一AOE网中至少有一条关键路径,且是从源点到汇点的路径中最长的一条。
(×) 8. 给出不同的输入序列建造二叉排序树,一定得到不同的二叉排序树。
() 9. 当待排序序列初始有序时,直接插入排序的时间复杂性为O(n)。
(×) 10. 单链表可以实现随机存取。

三、填空题(每空1分,共10分)

1.二分查找算法描述如下:
intSearch_Bin(SST ST, KT key)
{
low=1 ;
high=ST. length;
while(low<=high)
{
mid=(low+high)/2;
if(key==ST.elem[mid].key)return mid;
else if(key<ST.elem[mid].key)
hight = mid - 1;
else low = mid + 1;
}
return 0;
}

2.在表达式“4-6/3+(7-3*2-5.....”求值的过程中,处理5时刻的操作数栈的内容为 2, 1, 5 ,运算符栈的内容为 +(-

3.链式二叉树的定义如下:
typedefstructBtn{
TElemType data;
BTN *lchild, *rchild;
}BTN ,*BT;

4.在有n个叶子结点的哈夫曼树中,总结点数是 2n-1
5.对n个元素进行归并排序,需要的辅助空间为 O(n)
6.对于顺序栈或队列,插入或删除元素的时间复杂性为 O(1)
7.在一个具有n个顶点的有向完全图中包含有 n(n-1) 条边。
8.有稀疏矩阵如下:

它的三元组存储形式为: (1, 3, 5), (2, 1, 7), (3, 1, -3), (4, 2, 4), (5, 2, 2)

四、综合题(每小题8分,6小题,共48分)

1.二叉树如图所示,请标明树中每个结点的平衡因子,说明该树是否平衡?再依次插入(90,30,45),同时进行平衡化处理,并计算平均查找长度ASL。
(1)在原图上标出每个结构的平衡因子(2分);
(2)该树是否平衡(1分):
(3)在下面平衡二叉树中依次插入(90,30,45),画出每插入一个元素时进行平衡化处理的结果(4分):

image.png

(4)求其ASL(1分):
ASL=(1*1+2*2+3*4+4*4)/11=3

image.png

2、设哈希表长为m=13,散列函数为H(k)=k mod 11,关键字序列为5,7,16,12,11,21,31,51,17,81;试求:散列后的表中关键字分布(假定解决冲突的方法为线性探测再散列法);求平均查找长度ASL;计算该表的装填因子。

(1)按要求求哈希表(5分):

0123456789101112
1112 81516751312117

(2)计算ASL(2分):ASL=(1*7+2*2+6*1)/10=1.7

(3)计算装填因子(1分):装填因子=10/13

3.现有以下按前序和中序遍历二叉树的结果:
前序:ABCEDFGHI 中序:CEBGFHDAI
画出该二叉树的逻辑结构图(6分),并在图中加入中序线索(2分)。

image.png

4.有电文:ABCDBCDCBDDBACBCCFCDBBBEBB。
用Huffman树构造电文中每一字符的最优通讯编码。画出构造的哈夫曼树,并给出每个字符的哈夫曼编码方案。
(1)构造哈夫曼树(5 分):
A:2 B:10 C:7 D:5 E:1 F:1
image.png

(2)哈夫曼编码方案(3 分):
A:0001 B:1 C:7

5.有一组待排序的关键字如下:(54,38,96,23,15,72,60,45,83)
分别写出希尔排序、快速排序、堆排序、归并排序第一趟排序后的结果。
(1)希尔排序(2分):d=5时,(54, 38, 45, 23, 15, 72, 60, 96, 83)
d=4时,(15, 38, 60, 23, 54, 72, 96, 45, 83)
(2)快速排序(2分):(45, 38, 15, 23, 54, 72, 60, 96, 83)
(3)堆排序(2分):(96, 83, 72, 45, 15, 54, 60, 38, 23)
(4)归并排序(2分):(38, 54, 23, 96, 15, 72, 45, 60, 83)

6.无向网如下:

6题题目

6题答案

五、算法题(12分)
已知带头结点的单循环链表L,编写算法实现删除其中所有值为e 的数据元素结点。
(要求:类型定义(2分)、算法描述(8分)和算法分析(2分))

typedef struct LNode {
    ElemType data;
    struct LNode *next;
} Lnode, *LinkList;

void ListDelete_e(LinkList L, Element e) {
    LinkList p, q;
    if (L->next==L)
        return;
    p = L;
    while (p->next != L)
    {
        if (p->next->data != e)
            p = p->next;
        else
        {
            q = p->next;
            p->next = q->next;
            free(q);
        }
    }
}

时间复杂度为 O(n)

文章最后更新时间为:2019 年 07 月 29 日 18:36:28

添加新评论