吉林大学珠海学院数据结构期末卷Word文件下载.docx
- 文档编号:17826357
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:10
- 大小:168.69KB
吉林大学珠海学院数据结构期末卷Word文件下载.docx
《吉林大学珠海学院数据结构期末卷Word文件下载.docx》由会员分享,可在线阅读,更多相关《吉林大学珠海学院数据结构期末卷Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
11
12
13
14
15
答案
C
D
A
B
评分标准:
每题回答正确得1分,错误不得分。
二、
判断题(本大题共5小题,每小题1分,共5分正确的打“√”,错误打“×
”)
1、√
2、√
3、√
4、×
5、×
评分标准:
三、应用题(6个小题,各题的分数在小题中给出,共60分)
1.(5分)将首元结点删除并插入到表尾(设链表长度大于1)。
全对得满分,错误酌情扣分。
2.
(5分)3个:
34215
,34251,
34521
全对得满分,错1个扣1分,错2个扣3分。
3.(5分)Head(Tail(Tail((apple,pear,banana,orange))))
全对得满分,不全对酌情减分。
4.(10分)
A:
0
B:
1001
C:
101
D:
10001
E:
11
F:
10000
全题10分,哈夫曼树7分,哈夫曼编码3分。
错误酌情扣分
5.
(1)
(2)
(3)
关键路径:
顶点序列是0-->
1-->
2-->
3-->
5
路径长度=4+5+4+3=16
全题15分,
(1)
(2)小题各4分,(3)小题7分。
6.
(1)二叉排序树
(2)最佳二叉排序树
(3)平衡二叉排序树
1)LR型
2)RL型
3)RR型
4)结果平衡二叉树
(1)ASLsuss=(1*1+2*2+3*3+4*3+5*2+6*1)/12=42/12
(2)ASLsuss=(1*1+2*2+4*3+5*4)/12=37/12
(3)ASLsuss=(1*1+2*2+4*3+4*4+5*1)/12=38/12
第1小题5分,画图4分,平均查找长度1分,错误酌情扣分;
第2小题3分,画图2分,平均查找长度1分,错误酌情扣分;
第3小题7分,画图6分,平均查找长度1分,错误酌情扣分。
7.因为(11-1)%(4-1)=1,所以加“虚段”,第一次由两个段合并。
最佳归并树如图
本小题5分,错误酌情扣分。
四、算法设计题(第1和3题各5分,第2题10分,共20分)
1.双向栈S是在一个数组空间V[m]内实现的两个栈,栈底分别处于数组空间的两端。
试为此双向栈设计栈初始化Init(S)、入栈Push(S,i,x)(x是和栈中元素有相同类型的变量)、出栈Pop(S,i)算法,其中i为0或1,用以指示栈号。
#defineElemTypeint
∥假设元素类型为整型
typedefstruct
{ElemTypeV[m];
∥栈空间
inttop[2];
∥top为两个栈顶指针的数组
}stk;
stkS;
∥S是如上定义的结构类型变量,为全局变量
(1)栈初始化
intInit()
{S.top[0]=-1;
S.top[1]=m;
return1;
//初始化成功
}
(2)入栈操作:
intpush(stkS,inti,intx)
∥i为栈号,i=0表示左栈,i=1为右栈,x是入栈元素。
入栈成功返回1,失败返回0
{if(i<
0||i>
1){printf(“栈号输入不对\n”);
exit(0);
if(S.top[1]-S.top[0]==1){printf(“栈已满\n”);
return(0);
switch(i)
{case0:
S.V[++S.top[0]]=x;
return
(1);
break;
case1:
S.V[--S.top[1]]=x;
}∥push
(3)退栈操作
ElemTypepop(stkS,inti)
∥退栈。
i代表栈号,i=0时为左栈,i=1时为右栈。
退栈成功时返回退栈元素
∥否则返回-1
{if(i<
0||i>
1){printf(“栈号输入错误\n”);
switch(i)
{case0:
if(S.top[0]==-1){printf(“栈空\n”);
return(-1);
elsereturn(S.V[S.top[0]--]);
if(S.top[1]==m{printf(“栈空\n”);
return(-1);
elsereturn(S.V[S.top[1]++]);
}∥switch
}∥算法结束
(4)判断栈空
intEmpty();
{return(S.top[0]==-1&
&
S.top[1]==m);
正确得5分,错误酌情减分。
2、给定mxn矩阵A[m][n](m和n都是大于0的正整数),并设A[i][j]≤A[i][j+1](0≤i≤m-1,0≤j≤n-2)和A[i][j]≤A[i+1][j](0≤i≤m-2,0≤j≤n-1)。
设x和矩阵元素类型相同,设计一算法判定x是否在A中,要求时间复杂度为O(m+n)。
voidSearch(ElemTypeA[][],intm,intn,ElemTypex)
{∥m*n矩阵A元素按行和按列有序,本算法查找x是否在矩阵A中
i=0;
j=n-1;
flag=0;
∥flag是成功查到x的标志
while(i<
=m-1&
j>
=0&
!
flag)
if(A[i][j]==x)flag=1;
elseif(A[i][j]>
x)j--;
elsei++;
if(flag)printf(“A[%d][%d]=%d”,i,j,x);
∥假定x为整型
elseprintf(“矩阵A中无%d元素\n”,x);
}∥search
3、(5分)请写出从图的邻接表表示转换成邻接矩阵表示的算法。
void
AdjListToAdjMatrix(AdjListgl,AdjMatrixgm)
∥将图的邻接表表示转换为邻接矩阵表示
{for(i=0;
i<
n;
i++)
∥设图有n个顶点,邻接矩阵初始化
for(j=0;
j<
j++)gm[i][j]=0;
for(i=0;
∥取第一个邻接点,填邻接矩阵元素值,并求下一个邻接点
{p=gl[i].firstarc;
while(p!
=null)
{gm[i][p->
adjvex]=1;
p=p->
next;
}
}∥for
}∥算法结束
4.荷兰国旗问题:
设有一个仅有红、白、蓝三种颜色的条块组成的条块序列。
编写一个时间复杂度为O(n)的算法,使得这些条块按红、白、蓝的顺序排好,即排成荷兰国旗图案。
voidDutchFlag(intR[],intn)
∥对红、白、篮三种颜色的条块,经排序形成荷兰国旗
{inti=1,j=1,k=n;
∥指针初始化,j到k是待排序元素
while(j<
=k)
if(r[j]==1)
∥红色
{r[i]<
-->
r[j];
i++;
j++;
elseif(r[j]==2)j++;
∥白色
else{r[j]<
r[k];
k--;
}∥兰色
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 吉林大学 珠海 学院 数据结构 期末
![提示](https://static.bdocx.com/images/bang_tan.gif)