数据结构学期样卷一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学期样卷一
一.单项选择题
1.有一个带头结点的单链表HEAD,则判断其是否为空链表的条件是(B )。
A.HEAD ==NULL
B. HEAD -> NEXT ==NULL
C. HEAD -> NEXT ==HEAD
D. HEAD != NULL
注:不带头结点,若L为头指针,L指向链表的第一个结点,L==NULL,为空表
2.若线性表最常用的操作是存取第i个元素及其前驱的值,可采用(D )存储方式最节省时间。
A.单向链表
B. 双向链表
C. 单向循环链表
D. 顺序表
注:当线性表的长度变化较大、难以估计其存储规模时,采用动态链表存储比较好;当线性表的长度变化不大、易于事先确定其大小时,为了节约存储空间,应采用顺序表作为存储结构;若线性表的操作主要是进行查找,很少做插入或者删除操作,基于时间考虑,宜采用顺序表作为存储结构;对于频繁进行......采用链表存储,若表的插入或删除发生在首尾俩端,则采用带尾指针的单循环链表。
3.某个栈的入栈的序列为A,B,C,D,E,则可能的出栈序列是(C )。
A.ADBEC
B. EBCAD
C. BCDEA
D. EABCD
注:A. A进栈就出栈,B,C,D进栈,D出栈,但B不能在C前面出栈
B. A,B,C,D,E进栈,E出栈,但B不能先出栈
C. A先进栈,B进栈就出栈,C进栈就出栈,D进出,E进出,最后出A
D. A,B,C,D,E进栈,E先出栈,A不能先出
4.广义表(a,(b),((c)))的表尾是(D )。
A.((c))
B. (((c)))
C. (c)
D. ((b),((c)))
注:(1)D = ():空表,其长度为0
(2)A = (a,(b,c)):表长度为2的广义表,其中第一个元素为单个数据a,第二个元素是一个子表(b,c)。
(3)B = (A,A,D):表长度为3,其前俩个元素为表A,第三个元素是空表D。
(4)C = (a,C):长度为2递归定义的广义表,C相当于无穷表C = (a,(a,(a,(...))))。
(5)Head(A)= a,即表A的表头是a。
(6)Tail(A)= ((b,c)),即表A的表尾是((b,c))。广义表的表尾一定是一个表。
6.一棵深度为h的二叉树,其结点总数最多为(2^h -1 )。
在二叉树的第i层上至多有2^(i-1)个结点
对任意一颗二叉树T,若终端结点数为n0,而其度数为2的结点数为n2,则n0=n2+1
具有n个结点的完全二叉树的深度为【log2^n】+1
7.A VL树是一种平衡的二叉排序树,树中任一结点的(B )。
A.左右子树的高度均相同
B. 左右子树高度差的绝对值不超过1
C. 左子树的高度大于右子树的高度
D. 左子树的高度小于右子树的高度注:左右子树也是平衡二叉排序树
8.在关键字随机分布的前提下,用二叉排序树的方法进行查找,其平均长度同(折半查找)数量级相同。
9.对于一个有向图,若一个顶点的度为k1,出度为k2,则对应的邻接表中,该结点单链表中的边结点数为( B )。
A.k1
B. k2
C. k1-k2
D. k1+k2
注:在无向图的邻接表中,顶点Vi的度恰好就是第i个单链表上结点的个数在有向图中,第i个单链表上结点的个数只是顶点Vi的出度只需通过表头向量表中找到第i个顶点的边链表的头指针。
10.下列关键字序列中,(D )是堆
A. 16,72,31,23,94,53
B. 94,23,31,72,16,53
C. 16,53,23,94,31,72
D. 16,23,53,31,94,72
注:堆可以看成一棵完全二叉树:任一根节点>=左右孩子(或者<=)(大的叫大根堆,小的叫小根堆。)注意一个堆中的这种性质有一致性,不能既有大于又有小于情况存在。
二.填空题
1.如下程序段:for(i=1;i<=n-1;i++)
For(j=i+1;j<=n;j++)x=x+1;
其中的x=x+1执行的语句频度为(n(n-1)/2 )。
注:第一个for语句执行i=0时第二个for语句要执行n-1 然后再回到第一个语句
i=1 。。。。。n-2 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
i=n-2。。。。。。。 1.。。
i=n-1。。。。。。。。。结束
2.在循环单链表La(La为头指针)中,指针p所指结点为表尾结点的条件是
(p->NEXT==La )。
注:单链表中判别条件为p!=NULL或p->next!=NULL;而单循环链表的判断条件是p!=La或p->next!=La。
3.在一棵度为3的树中,其中度为3的结点数为2个,度为2的结点数为1个,
度为1的结点数为2个,则度为0的结点数为(6 )个。
注:一个结点的子树个数称为此结点的度;树中所有结点的度的最大值是数的度。
树中结点数等于所有结点度数的和加1。
所以:2+1+2+X=2*3+1*2+2*1+X*0+1
所以X=6
5.在待排序的元素序列基本有序的前提下,效率最高的排序方法是(直接排序
或冒泡排序)。
7.若用一个大小为6的数组来实现循环队列,且当前的rear和front的值为0和
3,当从队列中删除1个元素后,front的值为(4 ),再加入2个元素后,rear的值为(2 )。
注:front为头指针指示器,出队front+1;rear为尾指针指示器,进队,rear+2。
Rear-front==Max,队列为满;求元素个数可以用这个公式:(尾指针-头指针)%队列长度+1
8.设有一个二维数组A[1..12,1..10],采用以行序为主序存储,每个数据元素占
有2个字节,该数组的首元素A[1][1]的地址为1200,则A[6,5]的地址为()。注:任意元素Aij的地址计算公式:Loc(A[i][j])=Loc(A[1][1])+(n*(i-1)+j-1)*size A[6,5]=1200+(10*(6-1)+5-1)*2=1308
9.设一哈希表表长M为100,用除留余数法构造哈希函数,即H(K) = K%P,为使
函数具有较好性能,P应选(<=100的素数)。
注:P为小于等于M的最大素数
三.构造题
1.给定权值{8,12,4,5,26,16,9},构造一棵带权路径最短的二叉树,并计算其带权路径长度。
注:----------------80
------ -----33 47
---------16 17 21 26
------------8 9 9 12
------------4 5
WPL=(4+5)*4+(8+9+12)*3+(16+26)*2=207
WPL = ∑Wi*Li Wi为第i个叶子结点的权值,Li为第i个叶子结点的路径长度
2.已知关键字集合(12,2,16,30,8,28,4,10,20,6,18),用快速排序从小到大(选第一个记录为基准进行划分),写出第一趟排序结束时的序列。注:low high 冒泡的改进。把第一个数据做标记,俩边进行比较,得出第一趟序列