A卷.docx
《A卷.docx》由会员分享,可在线阅读,更多相关《A卷.docx(11页珍藏版)》请在冰豆网上搜索。
![A卷.docx](https://file1.bdocx.com/fileroot1/2023-1/21/2a5ea71e-7a46-4d2f-bf92-0e74fbd8e362/2a5ea71e-7a46-4d2f-bf92-0e74fbd8e3621.gif)
A卷
2000年A卷
一、简答问题:
(每小题4分,共16分)
1.四类数据结构
集合,线性表,树,图
2.线性结构与非线性结构有何差别?
线性结构只有一个前驱和后继(非头结点和尾节点),非线性结构则可以有多个后继及多个前驱。
3.简述算法的定义与特性。
4.设有1000个无序元素,仅要求找出前10个最小元素,在下列排序方法中(归并排序、基数排序、快速排序、堆排序、插入排序)哪一种方法最好,为什么?
堆排序,其他排序需要将全部1000个数的顺序都确定下来,而堆排序则不需要。
二、判断正误:
(每小题1分,共5分)
正确在()内打√,否则打。
1.(F)二叉排序树或是一棵空树,或是具有下列性质的二叉树:
若它的左子树非空,则根结点的值大于其左孩子的值,
若它的右子树非空,则根结点的值大于其右孩子的值。
2.(T)索引顺序表的特点是块内可无序,块间要有序。
3.(T)子串是主串中任意个连续字符组成的序列。
4.(F)线性结构只能用顺序结构存放,非线性结构只能用链表存放。
5.()快速排序的枢轴元素可以任意选定。
T
三、单项选择题:
(每小题1分,共4分)
1.栈S最多能容纳4个元素。
现有6个元素按A、B、C、D、E、F的顺序进栈,问下列哪一个序列是可能的出栈序列?
C
A)E、D、C、B、A、FB)B、C、E、F、A、D
C)C、B、E、D、A、FD)A、D、F、E、B、C
2.将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点编号为1,则编号为49的结点的左孩子的编号为:
A
A、98B、99C、50D、48
3.对下列关键字序列用快速排序法进行排序时,速度最快的情形是:
A
A){21、25、5、17、9、23、30}B){25、23、30、17、21、5、9}
B){21、9、17、30、25、23、5}D){5、9、17、21、23、25、30}
4.设森林F中有三棵树,第一、第二和第三棵树的结点个数分别为M1、M2和M3。
与森林F对应的二叉树根结点的右子树上的结点个数是:
D
A)M1B)M1+M2C)M3D)M2+M3
四、填空题:
(每小题2分,共20分)
1.设一哈希表表长M为100,用除留余数法构造哈希函数,即H(K)=KMODP(P<=M),为使函数具有较好性能,P应选
2.N个结点的二叉树采用二叉链表存放,共有空链域个数为N+1
3.单链表与多重链表的区别是
4.在各种查找方法中,平均查找长度与结点个数无关的是哈希查找
5.深度为6(根层次为1)的二叉树至多有63个结点。
6.已知二维数组A[20][10]采用行序为主方式存储,每个元素占2个存储单元,并且A[10][5]的存储地址是1000,则A[18][9]的存储地址是1168
7.在一个单链表中p所指结点之后插入s所指结点时,应执行
s->next=p->next和p->next=s的操作.
8.广义表((a,b),c,d)的表头是(a,b),表尾是(c,d)
9.循环单链表LA中,指针P所指结点为表尾结点的条件是p->next=head
10.在一个待排序的序列中,只有很少量元素不在自己最终的正确位置上,但离他们的正确位置都不远,则使用直接插入排序方法最好。
五、构造题:
(每小题5分,共25分)
1.已知一棵二叉树,其中序序列DBCAFGE,后序序列DCBGFEA,构造该二叉树。
A
BE
DCF
G
2.设哈希表长度为11,哈希函数H(K)=(K的第一字母在字母表中的序号)MOD11,若输入顺序为(D,BA,TN,M,CI,I,K,X,TA),处理冲突方法为线性探测再散列或链地址法,要求构造哈希表,并求出等概率情况下查找成功平均查找长度。
线性探测再散列:
20/9;链地址法:
5/3
3.有一组关键字{50,52,85,22,96,17,36,55},请用快速排序,写出第一趟排序结果。
36,17,22,50,96,85,52,55
4.已知叶子结点值2,3,5,6,9,11,构造哈夫曼树,计算其带权路径长度。
36
1521
691110
55
23
87
5.画出8个结点的折半判定树。
六、算法设计题:
(每小题15分,共30分)
(仅要求给出子程序)
1.编写算法,判断带头结点的双向循环链表L是否对称。
(15分)
对称是指:
设各元素值a1,a2,...,an,则有ai=an-i+1,
即指:
a1=an,a2=an-1。
。
。
。
。
。
。
有节点a0
结点结构为:
prior
data
next
BoolJudge(node*head)
{
if(head==NULL||head->prior==NULL)
returntrue;
else
{
node*pt,*qt;
pt=head;qt=head->prior;
while(pt!
=qt&&pt->next!
=qt)
{
if(pt->data!
=qt->data)
returnfalse;
else
{
pt=pt->next;
qt=qt->prior;
}
}
returntrue;
}
}
2.二叉排序树T用二叉链表表示,其中各元素均不相同。
(1)写出递归算法,按递减顺序打印各元素的值。
(10分)
(2)写出完成上述要求的非递归算法。
(5分)
voidPrint(node*pt)
{
if(pt==NULL)
return;
else
{
Print(pt->RChild);
cout<data<<“”;
Print(pt->LChild);
}
}
《数据结构》试卷参考答案与评分标准
(2000级)
一、简答问题:
(每小题4分,共16分)
1. 集合结构、线性结构、树形结构、网状结构
2. 线性结构的前驱与后继之间为一对一关系,非线性结构的前驱与后继之间通常为一对多或多对多关系。
3. 解决特定问题的有限指令序列。
有限性、确定性、可行性、有0个或多个输入数据、有1个或多个输出结果。
4. 堆排序。
因为一趟堆排序排定一个元素,只需进行前10趟堆排序就可以了。
其它排序方法均需进行完全排序。
二、判断正误:
(每小题1分,共5分)
正确在( )内打√,否则打。
1.() 2.(√) 3.(√) 4.() 5.(√)
三、单项选择题:
(每小题1分,共4分)
1.C) 2.A) 3. A) 4. D)
四、填空题:
(每小题2分,共20分)
1. 97 2. n+1 3.链域数目不同
4.哈希查找法 5.26–1 6.1168
7.p->next 、 s 8.(a,b) 、 (c,d)
9.P->next==LA 10.直接插入
五、构造题:
(每小题5分,共25分)
1.
2.
0
1
2
3
4
5
6
7
8
9
10
K
TA
BA
M
D
CI
X
TN
I
ASL=20/9
0
1
2
3
4
5
6
7
8
9
10
ASL=15/9
3.
{36,17,22,50,96,85,52,55}
4.
WPL=11×2+6×2+9×2+5×3+2×4+3×4
=87
[注]:
哈夫曼树的左右子树可以互换。
5.
[注]:
如果求中点时采用向上取整,则二叉树的形态为左子树偏长。
六、算法设计题:
(每小题15分,共30分)
(仅要求给出子程序)
1.[解答]:
intjudge(DLinkListL){
p=L->next; q=L->prior;
while(p!
=q)
{if(p->data!
=q->data)return0;
if(p->next==q)return1;
p=p->next;
q=q->prior;
}
return1;
}
[注]:
可以不用返回值,而用打印信息。
2. [解答]:
(1)
voidprint_1(BiTreeT){
if(T!
=NULL)
{print_1(T->RChild);
printf(“%c”,T->data);
print_1(T->LChild);
}
}
(2)
void Print_2(BiTreeT)
{InitStack(&S);
p=T;
while(p!
=NULL||!
IsEmpty(S))
{while(p!
=NULL)
{Push(&S, p);
p=p->RChild;
}
if(!
IsEmpty(S))
{Pop(&S, &p);
printf(“%c”, p->data);
p=p->LChild;
}
}
}
2000年B卷
一、简答问题:
(每小题4分,共16分)
1.四类基本数据结构的含义和特点。
2.简述栈和队列的共同点和不同点。
它们与线性表有什么关系?
3.举例说明什么是抽象数据类型。
4.算法的定义和特性。
二、判断正误:
(每小题1分,共5分)
正确在()内打√,否则打。
(T)
(1)由树的中序表示和前序表示可以导出树的后序表示。
(T)
(2)将一棵树转换为二叉树表示后,该二叉树的根结点没有右子树。
(T)(3)采用二叉树来表示树时,树的先根次序遍历结果与其对应的二叉树的前序遍历结果是一样的。
(F)(4)在Huffman树中,权值较大的叶子结点离根较远。
(F)(5)用一维数组存储二叉树时,是以先根遍历的次序存储结点。
三、单项选择题:
(每小题1分,共4分)
1.对线性表,在下列哪种情况下应当采用链表表示?
B
A)经常需要随机地存取元素B)经常需要进行插入和删除操作
C)表中元素需要占据一片连续的存储空间D)表中元素的个数不变
2.在待排序文件已基本有序的前提下,下述排序方法中效率最高的是:
A
A)直接插入排序B)简单选择排序C)快速排序D)归并排序
3.设有关键码序列(Q,G,M,Z,A,N,P,X,H),下面哪一个序列是从上述序列出发建堆的结果?
B
A)A,G,H,M,N,P,Q,X,Z B)A,G,M,H,Q,N,P,X,Z
C)G,M,Q,A,N,P,X,H,Z D)H,G,M,P,A,N,Q,X,Z
4.以下哪一个术语与数据的存储结构无关?
C
A)栈B)散列表C)穿线树D)双链表
四、填空题:
(每小题2分,共20分)
1.字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成5个不同的字符串。
2.设仅包含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为
。
3.在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找关键码值12,所需的关键码比较次数为:
4。
4.快速排序的最坏情况,其待排序的初始排列是顺序排列或逆序排列.
5.二叉树的先序遍历序列为:
EFHIGJK,中序遍历序列为:
HFIEJKG,则该二叉树根的右子树的根是:
G。
6.顺序表(即顺序存储结构的线性表)中插入一个元素,
平均需要移动(n+1)/2个元素.
7.二维数组A[0..20][0..10]采用行序为主方式存储,每个元素占4个存储单元,并且A[0][0]的存储地址是1016,则A[9][8]的存储地址是1408
8.循环单链表La中,指针P所指结点为表尾结点的条件是p->next=La
9.N个结点的二叉树,采用二叉链表存放,空链域的个数为n+1.
10.要在一个单链表中p所指结点之后插入s所指结点时,
应执行和的操作.
五、构造题:
(每小题5分,共25分)
1.对以下关键字序列建立哈希表:
(SUN,MON,TUE,WED,THU,FRI,SAT),哈希函数为H(K)=(K中最后一个字母在字母表中的序号)MOD7。
用线性探测法处理冲突,要求构造一个装填因子为0.7的哈希表,并分别计算出在等概率情况下查找成功与不成功的平均查找长度。
2.已知一棵树如图所示,请将该树转化为二叉树。
3.给定权值{8,12,4,5,26,16,9},构造一棵带权路径长度最短的二叉树,并计算基带权路径长度。
4.已知关键码序列为{2,8,31,20,19,18,53,27},试画出逐个插入这8个关键码后的二叉排序树。
5.设有关键码序列(Q,G,M,Z,A,N,P,X,H),将其筛选为一个堆序列。
六、算法设计题:
(每小题15分,共30分)
(仅要求给出子程序)
1.假设有一个循环链表的长度大于1,且表中既无头结点也无头指针。
已知s为指向链表某个结点的指针,试编写算法在链表中删除指针s所指结点的前趋结点。
(15分)
2.编写算法,对n个关键字取整数值的记录序列进行整理,以使所有关键字为负值的记录排在关键字为非负值的记录之前。
要求:
采取顺序存储结构,至多使用一个记录的辅助存储空间,算法的时间复杂度为O(n)。
(15分)