南京信息工程大学滨江学院数据结构期末试题及答案.docx
《南京信息工程大学滨江学院数据结构期末试题及答案.docx》由会员分享,可在线阅读,更多相关《南京信息工程大学滨江学院数据结构期末试题及答案.docx(9页珍藏版)》请在冰豆网上搜索。
南京信息工程大学滨江学院数据结构期末试题及答案
、单项选择题
1、在以下的叙述中,正确的是(A)。
A.线性表的线性存储结构优于链表存储结构
B.二维数组是其数据元素为线性表的线性表
C.栈的操作方式是先进先出
D.队列的操作方式是先进后出
2、判定一个循环队列qu(最多元素为mO)为空的条件是(A)。
A.qu->front==qu->rear
B.qu->front!
=qu->rear
C.qu->front=(qu->rea叶1)%mO
D.qu->front!
=(qu->rear+1)%mO
3、向一个栈顶指针为hs的链栈中插入一个s所指结点时,则执行(C)
A.hs->next=s;
B.s->next=hs->next;hs->next=s;
C.s->next=hs;hs=s;
D.s->next=hs;hs=sh->next
4、串是一种特殊的线性表,其特殊性体现在(B)。
A.可以顺序存储
B.
数据元素是一个字符
C.可以链接存储
D.
数据元素可以是多个字符
5、设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分按行序存
放在一维数组B[1,n(n-1)/2]中,对下三角部分中任一元素aid(i>j),在
一维数组B的下标位置k的值是(B)。
A.i(i-1)/2+j-1B.i(i-1)/2+j
C.i(i+1)/2+j-1D.i(i+1)/2+j
6、将递归算法转换成对应的非递归算法时,通常需要使用(A)。
A.栈B.队列C.链表D.树
7、树的基本遍历策略可分为先根遍历和后根遍历叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。
这里,我们把由树转化得到的二叉树叫做这棵树对应的二叉树。
结论_A」正确的。
A.树的先根遍历序列与其对应的二叉树的先序遍历序列相同
B.树的后根遍历序列与其对应的二叉树的后序遍历序列相同
C.树的先根遍历序列与其对应的二叉树的中序遍历序列相同
D.以下都不对
&对一个满二叉树,仃个树叶,n个结点,深度为h,则(D)。
A.n=h+mB.h+m=2nC.m=h-1D.n=2h-19、具有7个顶点的无向图至少应有(A)条边才能确保是一个连通图
A.5B.6C.7D.810、判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可
以利用(D)。
A.求关键路径的方法B.
11、有一个有序表为{1,3,9,12,32,41,
C.宽度优先遍历算法D.
查找值为82的结点时,(C)次比较后查找成功
A.1B.2C.4D.812、如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用_A_S找方法。
A.分块B.顺序C.二分D.散列
13、在所有排序方法中,关键字比较的次数与记录的初始排列次序无关
的是Do
A.希尔排序B.起泡排序C.插入排序D.选择排序
14、快速排序方法在(C)情况下最不利于发挥其长处
A.
要排序的数据量太大
B.
要排序的数据中含有多个相同值
C.
要排序的数据已基本有序
D.
要排序的数据个数为奇数
15、
索引无序文件是指(A)。
A.
主文件无序,索引表有序
B
.主文件有序,索引表无序
C.
主文件有序,索引表有序
D.
主文件无序,索引表无序
二、填空题(每空2分,共30分)
16、下面程序段的时间复杂度是___O(m*n)。
for(i=0;ifor(j=0;ja[i][j]=0;
17、向栈中压入元素的操作是_p->next=s;p->data=x;s=p;_。
条件是
k个存储的地址是
18、在hq的链队中,判定只有一个结点的__hq->front=hq->rear_。
19、已知二维数组A[m][n]采用行序为主方式存储,每个元素占
单元,并且第一个元素的存储地址是LOC(A[0][0]),A[i][j]
___LOC(A[0][0])+(n*i+j)*k_。
20、有如下递归方程:
voidprint(intw)
{inti;
if(w!
=0)
{print(w-1);
for(i=1;i<=w;i++)print(
rpintf(“/n”);
}
}调用语句print(4)结果是1
22
333
4444
21、广义表(a,(a,b),d,e,((i,j),k))__3___。
22、以数据集{4,5,6,7,10,12,18}
“%3d,w);
的长度是5,深度是
为结点权值所构造的哈夫曼树为
,其带权路径长度为0
23、已知图G的邻接表如下图所示,其从顶点v1出发的深度优先搜索序列
_v1->v2->v5->v4->v3->v6_
为_v1->v2->v3->v6->v5->v4_,其从顶点v1出发的宽度优先搜索序列为
24、在各种查找中,平均查找长度与结点个数n无关的查法方法是—哈希
25、在对一组记录{54,38,96,23,15,72,60,45,83}进行直接插入排序时,
当把第7个记录60插入到有序表时,为寻找插入位置需比较_3_次。
26、顺序查找法的平均查找长度为_n(n+1)/2;二分查找法的平均
查找长度为—((n+1)*log2(n+1))/n-1。
三、解答操作题(每小题5分,共20分)
27、已知序列{503,87,512,61,908,170,897,275,653,462},采用基数排
序法对该序列作升序排序时的每趟的结果。
A[0]=170
A[1]=61
A[2]=512->462
A[3]=503->653
A[5]=275
A[7]=87->897
A[8]=908
28、设给定权集w={2,3,4,7,8,9},度构造关于W勺一棵哈夫曼树,并求其加权路径长度wpl。
29、对下图所示的树:
(1)转换成对应的二叉树形式,并且说明转换规则;
(2)写出前序、中序、后序遍历的结果;
30.现有稀疏矩阵A如下图所示,要求画出以下几种表示法
(1)三元组表示法
(2)带行指针向量的单链表表示法
0
0
22
0
-15'
0
13
3
0
0
0
(3)十子链表示法。
0
0
0
-6
0
0
四、算法阅读题(每小题6分,共12
0
0
0
0
0
0
分)
0
0
0
0
0
0
0
28
0
0
0,
31、下列算法的功能是实S串的逆序
(串均采用顺序存储方式),请在空白处填入适当的内容。
SeqString*invert(SegString*s)
{inti;
chartemp
for(i=0;ilength/2;i++)
{temp=s->ch[i];
s->ch[i]=s->ch[s->lenglh-i+1];_
s->ch[s->length-i+1]=temp;
}
returns;}
32.下列算法的功能是实现链栈的进栈运算,请在空白处填入适当的内
容。
链栈的类型定义如下:
Typedefstructstacknode{
DataTypedata;
Structstacknode*next;
}StackNode;
Typedefstruct{
StackNode*top;
}LinkStack;
VoidPush(LinkStack*s,DataTypex)
StackNodep;
*p=(StackNode*)malloc(sizeof(StackNode));
p->data=x;
p->next=s->top;
s->top=p;}
五、算法设计题
33、假设二叉树采用链接方法存储,编写一个函数复制一棵给定的二叉
left
data
ri^rt
Copy(BiTree*T)
{
if(!
T)returnNULL;
BiTree*S=newBiTree;if(T->Lchild)S->Lchild=T->Lchild;Copy(T->Lchild);if(T->Rchild)S->Rchild=T->Rchild;Copy(T->Rchild);
}
D卷
一、单项选择题1.B2.A3.C4.B5.B6.A7.A
8.D9.A10.D11.C12.A13.D14.C15.A
二、填空题(每小题2分,共30分)
16.O(m*n)17.先移动栈顶指针,后存入元素
18.hq->front==hq->rear19.LOC(A[0][0])+(n*i+j)*k
20.
答1
2
2
3
3
3
4
4
44
23
、
v1,v2,v3,v6,v5,v4
v1,v2,v5,v4,v3,v6
24、哈希表查找法25、3
26、(n+1)/2((n+1)*log2(n+1))/n-1
三、操作题(每小题5分,共20分)
27.初始:
503,87,512,61,908,170,897,275,653,462第1趟(按个位排序)170,61,462,512,503,653,475,87,897,908
第2趟(按十位排序)503,908,512,653,61,462,170,175,87,897第3趟(按百位排序)61,87,170,275,462,503,512,653,897,908
28.加权路径长度wpl=7X2+8X2+4X3+2X4+3X4+9X2=80
29.
(1)
(2)前序:
abcejfdghki
中序:
jefcgkhidba
后序:
jfekihgdcba
30.
四、算法设计题(每小题6分,共12分)
参考答案
30.s-length-i+1
Temp
Return(s)
31.p->data=x;
p->next=s->top;
s->top=p;
五、算法设计题(共8分)
参考答案
33.
Btree*copy(btree*b)
{
Btree*p;
If(b!
=NULL)
{
P=(btree*)malloc(sizeof(btree))
p->data=b->data;
p->left=copy(b->left);
p->right=copy(b->right);
return(p);
}
Elsereturn(NULL);
}