数据结构A卷试题及答案Word文档下载推荐.docx
《数据结构A卷试题及答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构A卷试题及答案Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
C.18
D.40
5.一棵含有101个结点的完全二叉树存储在数组bt[102]中,其中bt[0]不用,若bt[k]是叶子结点,则k的最小值是()。
A.51
B.50
C.49
D.48
6.稀疏矩阵一般的压缩存储方法有两种,即()。
A.二维数组和三维数组
B.三元组表和散列表
C.三元组表和十字链表
D.散列表和十字链表
7.对顺序存储的18个数据元素(A[1]~A[18])的有序表做二分查找,则查找A[3]的比较序列的下标为()。
A.1,2,3
B.9,5,2,3
C.9,5,3
D.9,4,2,3
8.用邻接矩阵存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小与图中的结点的个数有关,而与图的边数无关,这种说法()。
A.正确
B.错误
9.下列排序算法中,某一趟排序结束后未必能选出一个元素放在最终位置上的是()。
A.堆排序
B.冒泡排序
C.直接插入排序
D.快速排序
10.在平衡二叉树中插入一个结点后造成了不平衡,设最小不平衡子树之根为A,并已知A的左孩子的平衡因子为-1,右孩子的平衡因子为0,则应作()型调整使其平衡。
A.LL
B.LR
C.RL
D.RR
11.在解决计算机与打印机之间速度不匹配问题时通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机依此从该缓冲区中取出数据打印,该缓冲区应是一个()结构。
A.堆栈
B.队列
D.链表
二、填空题(每空2分,共18分)
1.以下程序段的时间复杂度是________________________,其中n为正整数。
inti=1;
while(i<
=n)
i=i*2;
2.对顺序存储结构的线性表,设表长为n;
在等概率假设条件下,插入一个数据元素需平均移动表中元素______________个;
在最坏情况下需移动表中元素______________个。
3.设树T的度为4,其中度为1、2、3、4的结点的个数分别为4、3、2、1,则树T的叶子结点的个数是。
4.判定一个环形队列qu(最多元素为MaxSize)为空的条件是__________________________________________,判定环形队列qu为满队列的条件是__________________________________________。
5.设森林T中有4棵树,结点个数依次为n1,n2,n3,n4,当把森林T转换成一棵二叉树后,二叉树根结点的右子树上有________________________个结点。
6.设栈S和队列Q的初始状态为空,元素a,b,c,d,e,f依次通过栈S,一个元素出栈后即进入队列Q。
若这6个元素出队列的顺序为b,d,c,f,e,a,则栈S的容量至少应该是________________。
7.用head和tail函数,取出广义表L=((x,y,z),(a,b,c,d))中元素b的运算是_____________________________________________________________________。
三、解答下列问题(共30分)
1.(本题6分)已知一颗二叉树的中序遍历序列为DCEFBHGAKJLIM,后序遍历序列为DFECHGBKLJMIA,问:
能不能唯一确定一颗二叉树?
若能,画出该二叉树。
2.(本题8分)设有一组关键字序列:
(29,18,25,47,58,12,51,10)要按照关键字值递增的次序进行排序。
A.若采用初始增量为4的希尔排序,写出第一趟排序的结果:
B.若采用以第一个元素为基准元素的快速排序法,写出第一趟排序的结果:
C.若采用二路归并排序,写出第一趟排序的结果:
3.(本题8分)以下面给出的数据序列作为叶子结点的权值构造一棵哈夫曼树,并计算其带权路径长度WPL。
{4,5,6,7,10,12,15,18,23}
4.(本题8分)设有一组关键字(100,20,21,35,3,78,99,45),采用哈希函数H(K)=K%7,采用开放地址的线性探查法处理冲突,试在0至8的哈希地址空间中,对该关键字序列构造哈希表,并求出在等概率情况下查找成功的平均查找长度ASL。
四、算法填空(每空2分,共14分)
1.下面是一个二叉树中序遍历的非递归算法,请在空白处填上适当内容,使其成为一个完整算法。
voidInorder(BTNode*b)//二叉树中序遍历非递归算法
{BTNode*St[MaxSize],*p;
inttop=-1;
if(b!
=NULL)
{p=b;
while(top>
-1||p!
{while(p!
{top++;
St[top]=p;
;
}
if(top>
-1)
{p=St[top];
top--;
printf(“%c”,p->
data);
}
printf(“\n”);
}
2.设二叉排序树采用二叉链表存储,以下递归算法从大到小输出二叉排序树结点值(data),请将算法补充完整。
InOrderBST(BTNode*b)//二叉排序树从大到小输出
{if(b!
{InOrderBST();
printf(“%c”,);
InOrderBST();
}
}
3.下面是一个堆排序算法,请在空白处填上适当内容,使其成为一个完整算法。
其中sift为筛选算法,原型为:
voidsift(RecTypeR[],intlow,inthigh);
voidHeapSort(RecTypeR[],intn)//堆排序算法
{inti;
RecTypetemp;
for(i=;
i>
=1;
i--)//循环建立初始堆
sift(R,i,n)
for(i=n;
i>
=2;
i--)
{temp=R[1];
R[1]=R[i];
R[i]=temp;
sift();
//重建堆
五、算法设计题
1.(本题10分)设计一个算法Reverse,利用环形队列和顺序栈的基本运算将指定队列中的内容逆置。
2.(本题6分)设计一个算法MatToList,将无向图的邻接矩阵g转换为邻接表G,相关类型定义如下:
//邻接矩阵相关定义
#defineMAXV<
最大顶点个数〉
typedefstruct
{intno;
InfoTypeinfo;
}VertexType;
{intedges[MAXV][MAXV];
intn,e;
VertexTypevexs[MAXV];
}MGraph;
//邻接表相关定义
typedefstructAnode
{intadjvex;
structAnode*nextarc;
}ArcNode;
typedefstructVnode
{vertexdata;
ArcNode*firstarc;
}VNode;
typedefVNodeAdjList[MAXV];
{AdjListadjlist;
intn,e;
}ALGraph;
《数据结构》参考答案
六、选择题(从下列答案选项中选出一个正确答案,每小题2分,共22分)
1.A2.C3.B4.B5.A6.C7.D8.A9.C10.B11.B
七、填空题(每空2分,共18分)
8.O(log2n)
9.
(1)n/2
(2)n
10.11
11.
(1)qu->
rear==qu->
front
(2)(qu->
rear+1)%MaxSize==qu->
12.n2+n3+n4
13.3
14.head(tail(head(tail(L))))
八、解答下列问题(共30分)
1.
能
A
BI
CGJM
DEHKL
F
2.
A.(29,12,25,10,58,18,51,47)
B.(10,18,25,12,29,58,51,47)
C.(18,29,25,47,12,58,10,51)
3.
100
5842
25332319
12131518109
6745
WPL=299
4.
1
2
3
4
5
6
7
8
21
35
78
99
20
45
ASL=(4*1+1*2+1*4+2*5)/8=2.5
九、算法填空(每空2分,共14分)
1.
(1)p=p->
lchild;
(2)p=p->
rchild
2.
(1)b->
(2)b->
data
(3)b->
lchild
3.
(1)n/2
(2)R,1,i-1
十、算法设计题
1.(10分)
voidReverse(SqQueue*&
q)
{ElemTypex;
SqStackst;
InitStack(&
st);
while(!
QueueEmpty(q))
{deQueue(q,x);
Push(&
st,x);
while(!
StackEmpty(&
st))
{Pop(&
enQueue(q,x);
2.(6分)
voidMatToList(Mgraphg,ALGraph*&
G)
{inti,j,n=g.n;
ArcNode*p;
G=(ALGraph*)malloc(sizeof(ALGraph));
for(i=0;
i<
n;
i++)
G->
adjlist[i].firstarc=NULL;
i<
i++)
for(j=n-1;
j>
=0;
j--)
if(g.edges[i][j]!
=0)
{p=(ArcNode*)malloc(sizeof(ArcNode))
p->
adjvex=j;
nextarc=G->
adjlist[i].firstarc;
G->
adjlist[i].firstarc=p;
G->
n=n;
e=g.e;