北邮算法与数据结构习题参考标准答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 ‘{’:

相关文档
最新文档