《数据结构》作业参考答案1.docx
《《数据结构》作业参考答案1.docx》由会员分享,可在线阅读,更多相关《《数据结构》作业参考答案1.docx(19页珍藏版)》请在冰豆网上搜索。
《数据结构》作业参考答案1
《数据结构》作业参考答案
一、选择题
1.ab
2.c
3. b
4. a,d
5.b
6.d
7. b
8.D
9.D
10.B
11.C
12.C
13.c
14.d
15.a
16.b
17.c
18.d
19.c
20.b
21.b
22.c
23.c
24.d
25.d
26.c
二、填空题
1.
2.34
3.2k-1,2k-1,2k-2+1
4.v1,v3,v2,v4,v5
5.4
6.数据项
7.结点的直接前驱结点,结点的直接后继结点
8.ST.top==-1
9.参加比较的两个字符串长度相同
10.
11.120
三、算法应用题
1.
解答:
WPL=4*4+5*4+6*3+7*3+10*3+12*2+18*2
=9*4+23*3+30*2
=36+69+60
=165
2.解答:
和已知序列对应的二叉树是:
3.
4.解答:
各关键字的哈希函数值见下表:
key
19
01
23
14
55
20
84
27
68
11
10
77
H(key)=key%13
6
1
10
1
3
7
6
1
3
11
10
12
采用开放地址法的线性探测再散列方法解决冲突,已知其装填因子
,对上表中的关键字序列构造所得哈希表如下:
地址
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
key
01
14
55
27
68
19
20
84
23
11
10
77
比较次数
1
2
1
4
3
1
1
3
1
1
3
2
在等概率情况下,其查找成功时的平均查找长度是:
5.和已知序列对应的森林如下图示:
6.解答:
设这8个字母的权重为7,19,2,6,32,3,21,10
7.解答:
①如图所示的无向带权图的邻接矩阵如下图示:
1
2
3
4
5
6
1
0
6
1
5
∞
∞
2
6
0
5
∞
3
∞
3
1
5
0
5
6
4
4
5
∞
5
0
∞
2
5
∞
3
6
∞
0
6
6
∞
∞
4
2
6
0
按Prim算法求得的最小生成树如下图(f)所示(树中结点用粗黑实线表示):
假设初始时,树中只有一个顶点,不含有任何一条边,下图(a)~(f)为用Prim算法求其最小生成树的过程。
②如图所示的无向带权图的邻接表如下图示:
按照Kruskal算法求得的最小生成树如下图(f)所示(树中结点用粗黑实线表示),假设初始时,树中含有全部顶点,但不含有任何一条边,下图(a)~(f)为用Kruskal算法求最小生成树的过程。
8.解答:
① 快速排序的最好情况是指,排序所需的“关键字间的比较次数”和“记录的移动次数”最少的情况,在n=7时,至少需要进行2趟排序。
因此,当n=7时在最好情况下需进行的比较次数是10次。
② n=7时的一个最好情况的初始排列实例是:
4,7,5,6,3,1,2
9.解答:
对长度为20的有序表进行斐波那契查找的判定树如下图示:
其等概率查找时查找成功的平均查找长度为:
10.
解答:
上图所示AOE网中各顶点事件的最早发生时间Ve(i)和最迟发生时间Vl(i)如下表示:
V1
V2
V3
V4
V5
V6
V7
V8
V9
Ve(i)
0
6
4
5
7
7
16
14
18
Vl(i)
0
6
6
8
7
10
16
14
18
上图所示AOE网中各活动的最早开始时间e(i)和最迟开始时间l(i)如下表示:
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
a11
e(i)
0
0
0
6
4
5
7
7
7
16
14
l(i)
0
2
3
6
6
8
7
7
10
16
14
有上表的可见活动a1,a4,a7,a8,a10,a11的最早开始时间和最迟开始时间相等,因此他们是关键活动,他们所在的路径是关键路径。
见下图示。
有2条关键路径。
四、算法设计题
1.本题涉及的存储结构描述如下:
单链表存储结构:
typedefstructLnode*LinkList;
typedefstructLnode
{
DataTypedata;
LinkListnext;
}Lnode,*LinkList;
voidmergelinklist(LinkList&lc,LinkListla,LinkListlb)
{
lc=la;
pa=la->next;pb=lb->next;pc=lc;
lc->next=NULL;
while(pa&&pb)
{
pc->next=pa;
pc=pa;
pa=pa->next;
pc->next=pb;
pc=pb;
pb=pb->next;
}
if(pa)pc->next=pa;
delete(lb);
}
2.解答:
本题涉及的存储结构描述如下:
树的二叉链表存储结构:
typedefstrcutbitreenode*bitree;
typedefstructbitreenode{
datatypedata;
bitreelch,rch;
}bitreenode,*bitree;
队列的链式存储结构:
typedefstructlinkquenode*linkqueptr;
typedefstructlinkquenode{
bitreequelem;
linkqueptrnext;
}linkquenode,*linkqueptr;
typedefstructlinkque{
linkqueptrfront,rear;
}linkque;
voidlayertraverse(bitreebt)
{
cout<”<initqueue(Q);
if(bt)
{
enterqueueu(Q,bt);
while(!
emptyqueue(Q))
{
p=delqueue(Q);
cout<data;
if(p->lch)enterqueueu(Q,p->lch);
if(p->rch)enterqueueu(Q,p->rch);
}
}
elsecout<}//遍历结束
3.解答:
本题涉及的存储结构描述如下:
图的邻接链表存储结构:
typedefstructadjvexnode*adjvexptr;
typedefstruct{
intadjvex;
adjvexptrnext;
}adjvexnode,*adjvexptr;
typedefstructvexnode{
DataTypedata;
Adjvexptrfirstadj;
}vexnode;
typedefstruct{
vexnodevertex[VexNum+1]
intvexnum,arcnum;
}Graph_adjlink
intNum_connected(Graph_adjlinkg)
{
count=0;
for(v=1;v<=g.vexnum;v++)visited[v]=false;
for(v=1;v<=g.vexnum;v++)
{
if(!
visited[v])dfs(g,v);
count++;
}
returncount;
}
voiddfs(Graph_adjlinkg,intv)
{
cout<visited[v]=true;
p=g.vertex[v].firstadj;
while(p)
{
w=p->adjvex;
if(!
visited[w])dfs(g,w);
p=p->next;
}
}
4.解答:
本题涉及的存储结构描述如下:
单链表存储结构:
typedefstructLnode*LinkList;
typedefstructLnode
{
DataTypedata;
LinkListnext;
}Lnode,*LinkList;
voidmerge_two_asceding_linklist_to_one_desceding_linklist(LinkList&lc,LinkListla,lb)
{
pa=la->next;
pb=lb->next;
lc=la;
pc=lc;
pc->next=NULL;
while(pa&&pb)
{
if(pa->datadata)
{
u=pa->next;
pa->next=pc->next;
pc->next=pa;
pa=u;
}
else
{
u=pb->next;
pb->next=pc->next;
pc->next=pb;
pb=u;
}
}
while(pa)
{
u=pa->next;
pa->next=pc->next;
pc->next=pa;
pa=u;
}
while(pb)
{
u=pb->next;
pb->next=pc->next;
pc->next=pb;
pb=u;
}
delete(lb)
}
5.解答:
本题涉及的存储结构描述如下:
顺序存储结构:
constmaxsize=100;
typedefintElemType;
typedefstruct{
ElemTyper[maxsize+1];
intlength;//实际长度
}SqList;
Voidinert_x_into(SqList&va,intx)
{
j=va.length;
while((x=0))
{
va.r[j+1]=va.r[j];
j--;
}
va.r[j+1]=x;
va.length=va.length+1;
}
五、简答题
1.存储图:
2.树:
二叉树:
六、证明题
1.证明:
反证法。
设存在
使得
。
则①由
得出栈序列
;
②由
得知入栈序列为
;
由①知
最先出栈,则由②知出栈的序列将是
。
此出栈序列与由①得到的出栈序列矛盾。
因此假设错误。
从而若借助栈由输入序列
得到的输出序列为
(它是输入序列的一个排列),则在输出序列中不可能存在
使得
。
证毕
2.证明:
设总结点数为
,则:
①;
又该满k叉树上的每个结点出根之外都一个分支进入,这些分支是由非叶子结点产生的,因此有:
②;
由①和②得:
证毕