主题:关于链表的问题。
happytor
[专家分:70] 发布于 2006-11-29 13:16:00
关于链表的问题。
题目是:求两个一元多项式之和
要求是:用单链表存储一元多项式,将两个存储一元多项式的单链表相加,最后产生结果单链表;结果单链表按降幂或升幂排列。 算法怎么写啊?程序怎么设计啊?我先多谢了。
回复列表 (共2个回复)
沙发
hzcjg [专家分:30] 发布于 2006-12-02 11:57:00
//运行环境: Visual C++ 6.0
#include <iostream>
using namespace std;
typedef struct{
float coef; //系数
int expn; //指数
}DataType;
struct Node;
typedef struct Node *PNode;
struct Node{
DataType info;
PNode link;
};
typedef struct Node *LinkList;
typedef LinkList polynomial; //带头结点的单链表表示多项式
int cmp(DataType a,DataType b){
int flag;
if(a.expn<b.expn) flag=-1;
else if(a.expn==b.expn) flag=0;
else flag=1;
return flag;
}
//建立多项式单链表
void CreatPolyn(polynomial &P,int m){ //m为多项式项数
polynomial r,s;
P=new struct Node;
r=P;
for(int i=0;i<m;i++){
s=new struct Node;
cout<<"输入系数和指数:";
cin>>s->info.coef>>s->info.expn;
r->link=s;
r=s;
}
r->link=NULL;
}
//多项式相加得到新的多项式
polynomial AddPolyn(polynomial &pa,polynomial &pb){
polynomial newp,p,q,s,r;
float sum;
p=pa->link;
q=pb->link;
newp=new struct Node;
r=newp;
while(p&&q){
switch(cmp(p->info,q->info)){ //比较两个多项式的指数
case -1: //多项式pa当前结点的指数值小
s=new struct Node;
s->info.coef=q->info.coef;
s->info.expn=q->info.expn;
r->link=s;
r=s;
q=q->link;
break;
case 0: //两个多项式指数值相等
sum=p->info.coef+q->info.coef;
if (sum!=0.0){
s=new struct Node;
s->info.coef=sum;
s->info.expn=p->info.expn;
r->link=s;
r=s;
}
p=p->link;
q=q->link;
break;
case 1: //多项式pb当前结点的指数值小
s=new struct Node;
s->info.coef=p->info.coef;
s->info.expn=p->info.expn;
r->link=s;
r=s;
p=p->link;
break;
}//switch
}//while
//链接pa剩余结点
while(p){
s=new struct Node;
s->info.coef=p->info.coef;
s->info.expn=p->info.expn;
r->link=s;
r=s;
p=p->link;
}
//链接pb剩余结点
while(q){
s=new struct Node;
s->info.coef=q->info.coef;
s->info.expn=q->info.expn;
r->link=s;
r=s;
q=q->link;
}
r->link=NULL;
return newp;
}
//输出多项式单链表
void PrintPolyn(polynomial p){
polynomial s;
s=p->link;
while(s){
//输出系数和指数
cout<<s->info.coef<<"("<<s->info.expn<<")";
s=s->link;
}
cout<<endl;
}
void main(){
int m,n;
polynomial p,q;
cout<<"请输入多项式pa的项数:";
cin>>m;
CreatPolyn(p,m);
cout<<"请输入多项式pb的项数:";
cin>>n;
CreatPolyn(q,n);
PrintPolyn(p);
PrintPolyn(q);
PrintPolyn(AddPolyn(p,q));
}
运行情况:
请输入多项式pa的项数:4
输入系数和指数:2.3 4
输入系数和指数:3.2 3
输入系数和指数:2 2
输入系数和指数:1.2 1
请输入多项式pb的项数:3
输入系数和指数:5.6 5
输入系数和指数:-2.3 4
输入系数和指数:3.4 3
2.3(4) 3.2(3)2(2)1.2(1)
5.6(5)-2.3(4)3.4(3)
5.6(5)6.6(3)2(2)1.2(1)
板凳
happytor [专家分:70] 发布于 2006-12-02 14:46:00
我不懂C++啊,我只会C,可是还是感谢大虾的热心帮忙。
我来回复