北邮算法与数据结构习题参考标准答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作业参考答案
一、(带头结点)多项式乘法C= A×B:
void PolyAdd ( list &C,listR) //R为单个结
点
{
p=C;
while((!p->next) &&(p->next->exp>R->exp)) p=p->next;
if ((p->next) ||(p->next->exp<R->exp))
{R->next=p->next;p->next=R;} else
{ p->next->inf +=R->inf;delete R;
if (!p->next->inf)
{ R=p->next;p->next=R->next;delete R; }
}
}
voidPolyMul (list A, list B,list &C )
{
C=new struct node; C->next=NULL;q=B->next;
While (q )
{
p=A->next;
while(p )
{
r= new struct node;r->exp= p->exp +q->exp;
r->inf =p->inf* q->inf; PolyAdd(C,r);
p=p->next;
}
q=q->next;
}
}
二、梵塔的移动次数:
已知移动次数迭代公式为:M ( n)= 2M (n-1 ) + 1
初值为: M( 0 ) =0
则:M (n)= 2 (2M
(n-2 ) + 1) + 1
=4M( n-2 )+ 3
= 8M(n-3 )+ 7
=2i M ( n-i ) + 2i– 1
若n=i,则M(n-n) =0,故:M ( n ) =2nM( n-n)+2n–1
=2n– 1
所以,梵塔的移动次数为2n– 1次。
三、简化的背包问题:
void Pack( int m, int i, int t )// 初始值为:11t
{
for (k=i; k<=n; k++)
{
solution[m] = weight[k];
if( t == weight[k])
{
for ( j=1; j<=m;j++) cout<<solution[j];cout< } else if ( t> weight[k]) Pack (m+1,k +1,t - weight[k] ); } } 四、判断括号是否配对: int Correct( strings ) { Inistack(Q); for( i=0;s[i]== ‘=’;i++ )// 表达式以‘=’结束 { switch (s[i] ) { case‘(’: case‘[’: case ‘{’: