09-10学年第2学期数据结构试题(A卷)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2009~2010学年第二学期期末考试
《数据结构》试题A
一、选择题(每题2分,15题,共30分,请将答案写到后附答题纸的表格内)
1、在数据结构的讨论中把数据结构从逻辑上分为()
A )内部结构与外部结构 B)静态结构与动态结构
C )线性结构与非线性结构
D )紧凑结构与非紧凑结构。

2、对线性表进行二分查找时,要求线性表必须()。

A. 以链接方式存储,且数据元素有序
B. 以链接方式存储
C. 以顺序方式存储,且数据元素有序
D. 以顺序方式存储
3、若长度为n的线性表采用顺序存储结构存储,在第i个位置上插入一个新元素的时间复杂度为()A)O(n) B)O(1) C)O(n2) D)O(n3)
4、顺序循环队列中(数组的大小为6),队头指示front和队尾指示rear的值分别为3和0,当从队列中删除1个元素,再插入2个元素后,front和rear的值分别为()
A)5和1 B)2和4 C)1和5 D)4和2
5.在下列排序方法中,()的比较次数与记录的初始排列状态无关。

A. 直接插入排序
B. 起泡排序
C. 快速排序
D. 简单选择排序
6、设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当以列为主序存放时,元素A[5,8]的存储首地址为( )
A)BA+41 B)BA+180 C)BA+222 D)BA+225
7、下面哪个术语与数据的存储结构无关()
A)顺序表B)链表C)散列表D)队列
8、在一棵高度为k的满二叉树中,结点总数为()
A)2k-1 B)2k C)2k-1D)⎣log2k⎦+1
9、一棵完全二叉树上有1001个结点,其中叶子结点的个数为()
A)250 B)500 C)254 D)501
10、利用二叉链表存储树,则根结点的右指针是()
A)指向最左孩子 B)指向最右孩子 C)空 D)非空
11、若邻接表中有奇数个边结点,则一定()
A)图中有奇数个顶点B)图中有偶数个顶点C)图为无向图D)图为有向图
12、无向图G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是()
A)abecdf B)acfebd C)aebcfd D)aedfcb
13、在一个带权连通图G中,权值最小的边一定包含在G的()
A)最小生成树中B)深度优先生成树中C)广度优先生成树中D)深度优先生成森林中
14、已知含10个结点的二叉排序树是一棵完全二叉树,则该二叉排序树在等概率情况下查找成功的平均查找长度等于()
A)1.0 B)2.9 C)3.4 D)5.5
15、下面的序列中初始序列构成最小堆(小根堆)的是()
A)10、60、20、50、30、26、35、40 B)70、40、36、30、20、16、28、10
C)20、60、50、40、30、10、8、72 D)10、30、20、50、40、26、35、60 二、应用题(6题,共50分)
1、已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,……,n m个度为m的结点,问该树中有多少个叶子结点?要求写出分析过程。

(5分)
2、已知一棵二叉树的中序遍历的结果为ABCEFGHD,后序遍历的结果为ABFHGEDC,试画出此二叉树。

(5分)
3、设用于通信的电文由8个字母组成,字母在电文中出现的频率分别为:7,19,2,6,32,3,21,10。

试为这八个字母设计哈夫曼编码,并求出总码长。

(13分)
4、对于下图,从顶点V0出发,按照普里姆算法求出它的最小生成树,画出求解过程。

(10分)
5、设散列表长度为11,散列函数H(x) = x%11,给定的关键字序列为1,13,12,34,38,33,27,22。

试画出分别用拉链法和线性探测法解决冲突时所构造的散列表,并求出在等概率的情况下,这两种方法查找成功时的平均查找长度。

(12)
6、对下面关键字序列,写出采用希尔排序算法进行排序的每一趟的结果。

其中增量序列的取值为{5,3,1}。

(125,11,22,34,15,44,76,66,100,8,14,20,2,5,1)(5分)
三、编程题(3题,第1题5分,第2题5分,第3题10分,共20分)
注意:先进行类型定义,再写算法。

1、已知一个顺序表中的各结点值是从小到大有序的,设计一个算法,插入一个值为x的结点,使顺序表中的结点仍然是从小到大有序(不考虑空间不够用的情况)。

(6分)
2、设计一个算法,判断一个单链表中的各个结点值是否递增有序(带头结点的单链表)。

(6分)
3、编写一个函数,求一棵给定二叉树中叶子结点的个数(提示:采用任何一种遍历方法都可以)。

(8分)
第1页共2页第2页共2页
第3页 共3页
2009~2010学年第二学期期末考试
《数据结构》试题A 答案
一、 选择(每空2分,共30分) CCADB BDCDC ADABD 二、
1、设叶子个数为x
总度数=n 1+2*n 2+3*n 3+…+m*n m 结点总数=n 1+n 2+…+n m +x 而结点总数=总度数+1
则x=1+n 2+2*n 3+…+(m-1)*n m 2、
3、哈夫曼树的构造过程如下:
5、
采用线性探测解决冲突构造哈希表过程如下:H(1)=1 H(13)=2 H(12)=1
H(34)=1 H1(34)=2 H2(34)=3
H(28)=5
H(33)=0 H1(33)=1 … H4(33)=4
H(27)=5 H1(27)=6
struct Lnode *next;
}Lnode,*LinkList;
int judge(LinkList L){
p=L->next;
while(p->next!=NULL){
if(p->data>p->next->data) break;
else p=p->next;
}
if(p->next==NULL) return 1;
else return 0;
}
3、
typedef struct BitNode{
elemtype data;
struct BitNode *Lchild,Rchild;
}BitNode,*BiTree;
int leafcount(BiTree bt){
int num=0;
Queue Q;
BiTree p;
if(bt) {
p=bt;
enQueue(Q,p);
while(!emptyQueue(Q)){
deQueue(Q,p);
if(!p) continue;
if((p->lchild==NUll)&&(p->rchild==NULL))
num++;
enQueue(Q,p->lchild);
enQueue(Q,p->rchild);
}
}
return num;
}
第7页 共3页
2009~2010学年第二学期期末考试《数据结构》试题B 一、单项选择题(每道选择题只有一个正确答案;共15小题,每小题2分,共30分) 1.数据结构是【 】。

A .一种数据类型
B .数据的存储结构
C .一组性质相同的数据元素的集合
D .相互之间存在一种或多种特定关系的数据元素的集合
2. 线性表采用链式存储时,结点的存储地址【 】。

A .必须是不连续的 B .连续与否均可 C .必须是连续的 D .和头结点的存储地址相连续
3. 若线性表最常用的操作是存取第i 个元素及其前驱元素的值,则采用【 】存储方式最节省时间。

A 单链表
B 双向链表
C 单循环链表
D 顺序表
4.设栈S 和队列Q 的初始状态均为空,元素a,b,c,d,e,f,g 依次进入栈S 。

若每个元素出栈后立即进入
队列Q ,且7个元素出队的顺序是b,d,c,f,e,a,g ,则栈S 的容量至少是【 】。

A .1 B .2
C .3
D .4
5.为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓存区,主机将要输出的
数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。

该缓冲区的逻辑结构应该是
【 】。

A .栈 B .队列 C .树 D .图
6 排序算法的稳定性是指【 】。

A 经过排序之后,能使值相同的数据保持原顺序中的相对位置不变
B 经过排序之后,能使值相同的数据保持原顺序中的绝对位置不变
C 算法的排序性能与被排序元素的数量关系不大
D 算法的排序性能与被排序元素的数量关系密切
7.在下列排序方法中,【 】的比较次数与记录的初始排列状态无关。

A. 直接插入排序
B. 起泡排序
C. 快速排序
D. 简单选择排序 8.在任意一棵二叉树的前序序列和后序序列中,各叶子之间的相对次序关系【 】。

A .不一定相同 B .都相同 C .都不相同 D .互为逆序 9.二维数组A[8][9]按行优先顺序存储,若数组元素A[2][3]的存储地址为1087,A[4][7]的存储地址
为1153,则数组元素A[6][7]的存储地址为【 】。

A .1207
B .1209
C .1211
D .1213
10. 若从二叉树的任一结点出发到根的路径上所经过的结点序列按其关键字有序,则该二叉树是
【 】。

A.二叉排序树 B. 哈夫曼树 C. 堆 D. AVL 树
11. 栈中元素的进出原则是【 】。

A.先进先出 B.后进先出 C.栈空则进 D.栈满则出
12. 数组Q[20]用来表示一个循环队列,f为当前队列头元素的位置,r为队尾元素的后一位置,若
队列的长度和队头指针值分别为13和17,则当前尾指针的值为【 】。

A.8 B. 9 C.
10 D. 11
13.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是【 】A .9 B .11
C .15
D .不确定
14. 一棵具有 n 个结点的完全二叉树的树高度(深度)是【 】。

A .⎣logn ⎦+1
B .logn+1
C .⎣logn ⎦
D .logn-1
15. 引入二叉线索树的目的是【 】。

A 加快查找结点的前驱或后继的速度
B 为了能在二叉树中方便的进行插入与删除
C .为了能方便的找到
双亲 D .使二叉树的遍历结果唯一
二、应用题(共5题,共计50分)
1.已知一棵二叉树的中序遍历结果为GDHBAECIF ,后序遍历结果为GHDBEIFCA ,请画出该二叉树,并
写出其先序遍历序列(7分)
2.请将下图所示的森林转化为二叉树(5分)
3.已知带权图的邻接表如下所示,其中边表结点的结构为:
依此邻接表: (1)写出从顶点C 出发进行深度优先搜索的遍历序列; (2)写出从顶点C 出发进行广度度优先搜索的遍历序列;
(3)按照PRIM 算法画出从顶点C 出发求最小生成树的过程。

(15分) 4. 已知某系统在通信联络中只可能出现8种字符(a, b, c, d, e, f ,g, h),其概率分别为0.05,0.29,0.07,0.08,0.14, 0.23,0.03,0.11,试画出对应的编码Huffman 树(请按照左子树根结点的权小于等于右子树根结点的权的次序构造),求每种字符的Huffman 编码。

(12分) 5.设哈希(Hash )表的地址范围为0~17,哈希函数为: H (K )=K MOD 16。

K 为关键字,用线性探测法再散列法处理冲突,输入关键字序列:(10,24,32,17,31,30,46,47,40,63,49) 造出Hash 表,试回答下列问题:(11分) (1)画出哈希表的示意图; (2)若查找关键字63,需要依次与哪些关键字进行比较? (3)若查找关键字60,需要依次与哪些关键字比较? (4)假定每个关键字的查找概率相等,求查找成功时的平均查找长度。

四、编程题(每题10分,共20分) 1.设有一个单向循环链表结构,
first 是指向头结点的指针。

(1)请编写一个算法,将此链表中数据最小的结点从链表中删除。

(2)请分析你的算法的时间复杂度。

2. 给出算法分别求出二叉树的叶结点、度数为1的结点、度数为2的结点的个数。

2009~2010学年第二学期期末考试
《数据结构》试题B 答案
二、 选择(每空2分,共30分)
DBDCB ADBAC BCBAA 二、
1.二叉树如下:
先序序列为:ABDGHCEFI
2.该森林对应的二叉树如下:
3.
深度遍历结点序列:C D B A F E 广度遍历结点序列:C D A B F E PRIM 算法构造最小生成树的过程:
4.
每种字符的编码分别为:
a: 0 0 0 1 b: 1 0 c: 1 1 1 0 d: 1 1 1 1 e: 1 1 0 f: 0 1 g: 0 0 0 0 h: 0 0 1 5.
查找关键字63,H(k)=63 MOD 16=15,依次与31,46,47,32,17,63比较。

(3)
查找关键字60,H(k)=63 MOD 16=12,哈希地址12内为空,查找失败。

(4)
ASLSUCC=23/11
三、
5
3
8
11
19
23
42
29
14
8
7 15
29
58
100
1
0 0
1
1
1
1
1
1
h
e
b
f
C A 7 C A 7
D 8 C A 7 D 8 B
11
C A 7
D 8 B 11
E
9
C
A 7 D 8
B 11
E
9 F 14
a
g
c d
void deletemin(linklist *first)
{
linklist *p,*q;
q=first; p=first->next;
int min=p->data;
while(p->next!=first)
{
if(p->next!=first)
{
min=p->next->data;
q=p;
}
p=p->next;
}
p=q->next;
q->next=p->next;
free(p);
}
如果表中有n个元素,时间复杂的为O(n)。

2.
结点计数可以在遍历中解决。

根据“访问根结点”、“递归调用左子树”、“递归调用右子树”三者位置的不同,而有先序、中序和后序遍历。

int n2, n1, n0; 设置三个全局变量,分别记度为2,1和叶结点的个数
void count(BiTree t)
{
if(t)
{
if(t->lchild && t->rchild) n2++;
else if(t->lchild && !t->rchild || !t->lchild && t->rchild) n1++;
else n0++;
if(t->lchild!=null) count(t->lchild);
if(t->rchild!=null) count(t->rchild);
}
}
第11页共3页。

相关文档
最新文档