哈尔滨工程大学数据结构历年试卷1参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、选择题(每空1分,共15分)
1.D
2.D
3.C
4.D
5.B
6.A
7.B
8.B
9.C 10.B
11.D 12.A 13.B 14.D 15.D
二、判断题(每空1分,共10分)
1.×
2.×
3.√
4.×
5.×
6.√
7.×
8.×
9.×10.×
三、填空题(每空1分,共10分)
1.q=p->next; p->next=q->next; free(q);
2.(rear-front+m)% m
3.两串的长度相等且两串中对应位置的字符也相等。
4.2268
5.18
6.2K+1-1
7.9
8.6、3、4、5
9.63
10.初始有序
四、应用题(每题7分,共35分)
1.
字符A,B,C,D出现的次数为9,1,5,3。
其哈夫曼编码如下A:1,B:000,C:01,D:001
2.
先序:A B C D E F G H I J K L
中序:C B E D F G A J I H K L
后序:
C E G F
D B J I L K H A
3.
构造最小生成树过程如下:(下图也可选(2,4)代替(3,4),(5,6)代替(1,5))
4.
ASL =(1+1+1+2+1+2+1+2)/8=11/8
5.
不变
调整40之后:
调整85之后:
调整22
五、算法设计题(每题15分,共30分)
1.
LinkedList Union(LinkedList la,lb)
∥la,lb分别是带头结点的两个单链表的头指针,链表中的元素值按递增序排列,本算法将两链表合并成一个按元素值递减次序排列的单链表。
{ pa=la->next; pb=lb->next;∥pa,pb分别是链表la和lb的工作指针
la->next=null; ∥la作结果链表的头指针,先将结果链表初始化为空。
while(pa!=null && pb!=null) ∥当两链表均不为空时作
if(pa->data<=pb->data)
{ r=pa->next; ∥将pa 的后继结点暂存于r。
pa->next=la->next; ∥将pa结点链于结果表中,同时逆置。
la->next=pa;
pa=r; ∥恢复pa为当前待比较结点。
}
else
{r=pb->next;∥将pb 的后继结点暂存于r。
pb->next=la->next; ∥将pb结点链于结果表中,同时逆置。
la->next=pb;
pb=r; ∥恢复pb为当前待比较结点。
}
while(pa!=null) ∥将la表的剩余部分链入结果表,并逆置。
{r=pa->next; pa->next=la->next; la->next=pa; pa=r; }
while(pb!=null)
{r=pb->next; pb->next=la->next; la->next=pb; pb=r; }
}∥算法Union结束。
2.
int JudgeComplete(BiTree bt) //二叉树是完全二叉树返回1,否则,返回0
{int tag=0; BiTree p=bt, Q[]; // Q是队列
if(p==null) return (1);
QueueInit(Q); QueueIn(Q,p); //初始化队列,根结点指针入队
while (!QueueEmpty(Q))
{p=QueueOut(Q); //出队
if (p->lchild && !tag)
QueueIn(Q,p->lchild); //左子女入队
else {if (p->lchild) return 0; //前边已有结点为空,本结点不空
else tag=1; //首次出现结点为空
if (p->rchild && !tag) QueueIn(Q,p->rchild); //右子女入队
else if (p->rchild) return 0; else tag=1;
} //while
return 1;
} //JudgeComplete。