吉林大学珠海学院数据结构期末卷.docx
《吉林大学珠海学院数据结构期末卷.docx》由会员分享,可在线阅读,更多相关《吉林大学珠海学院数据结构期末卷.docx(10页珍藏版)》请在冰豆网上搜索。
吉林大学珠海学院数据结构期末卷
2011A参考答案
【字号:
大中小】
2011年春季学期计算机科学与技术、软件工程、网络工程专业
《数据结构》
期末试卷答案(A卷)
一、 单项选择题(本大题共15小题,每小题1分,共15分 答案写在答题卡上)×
答题卡 题号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
答案
C
D
D
A
D
A
A
A
A
A
B
B
B
B
B
评分标准:
每题回答正确得1分,错误不得分。
二、 判断题(本大题共5小题,每小题1分,共5分正确的打“√”,错误打“×”)
1、√ 2、√ 3、√ 4、× 5、×
评分标准:
每题回答正确得1分,错误不得分。
三、应用题(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;return
(1);
}
}∥push
(3)退栈操作
ElemTypepop(stkS,inti)
∥退栈。
i代表栈号,i=0时为左栈,i=1时为右栈。
退栈成功时返回退栈元素
∥否则返回-1
{if(i<0||i>1){printf(“栈号输入错误\n”);exit(0);}
switch(i)
{case0:
if(S.top[0]==-1){printf(“栈空\n”);return(-1);}
elsereturn(S.V[S.top[0]--]);
case1:
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
评分标准:
正确得5分,错误酌情减分。
3、(5分)请写出从图的邻接表表示转换成邻接矩阵表示的算法。
void AdjListToAdjMatrix(AdjListgl,AdjMatrixgm)
∥将图的邻接表表示转换为邻接矩阵表示
{for(i=0;i for(j=0;j for(i=0;i {p=gl[i].firstarc;
while(p!
=null)
{gm[i][p->adjvex]=1;p=p->next;}
}∥for
}∥算法结束
评分标准:
正确得5分,错误酌情减分。
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--;}∥兰色
}
评分标准:
正确得5分,错误酌情减分。