/*在使用單鏈表測試時有部分?jǐn)?shù)據(jù)出錯,不知道哪里有問題,煩請看一下代碼,或者說一下應(yīng)該測試哪幾類特殊數(shù)據(jù)?
?再者使用順序表方法(代碼未貼,且已通過測試)進(jìn)行時,用時反而少,請問單鏈表適用于哪里,會顯示出它的優(yōu)點(diǎn)?*/
#include?<iostream>
#include?<cstdio>
#include?<algorithm>
using?namespace?std;
typedef?struct{
????int?expn;//指數(shù)
????double?coef;//系數(shù)
}term,ElemType;
typedef?struct?LNode{
????ElemType?data;
????struct?LNode?*next;
}LNode,*LinkList;
typedef?LinkList?polynomial;
void?CreatPolyn(polynomial?&p,int?m);
void?PrintPolyn(polynomial?p);
void?AddPolyn(polynomial?&pa,polynomial?&pb);//pa=pa+pb,并銷毀一元多項式pb
int?main(){
????polynomial?pa,pb;
????int?ma,mb;
????scanf("%d",&ma);//輸入多項式的個數(shù)
????CreatPolyn(pa,ma);
????scanf("%d",&mb);
????CreatPolyn(pb,mb);
????AddPolyn(pa,pb);由于題目要求輸入數(shù)據(jù)是按順序排列的,就沒有進(jìn)行排序處理
????PrintPolyn(pa);
????return?0;
}
void?CreatPolyn(polynomial?&p,int?m){
????polynomial?q,rear;
????rear=(polynomial)malloc(sizeof(LNode));
????p=rear;
????rear->data.coef=rear->data.expn=0;
????rear->next=NULL;
????for(int?i=0;i<m;i++){
????????q=(polynomial)malloc(sizeof(LNode));
????????scanf("%d?%lf",&(q->data.expn),&(q->data.coef));
????????rear->next=q;
????????rear=q;
????????rear->next=NULL;
????}
}
void?PrintPolyn(polynomial?p){
????polynomial?q;
????q=p->next;
????int?count=0;
????while(q){
????????count++;
????????q=q->next;
????}
????printf("%d",count);
????q=p->next;
????while(q){
????????printf("?%d?%.2lf",q->data.expn,q->data.coef);
????????q=q->next;
????}
????printf("\n");
????free(q);
????q=NULL;
}
void?AddPolyn(polynomial?&pa,polynomial?&pb){
?????polynomial?qa,qb,rear;
?????rear=pa;
?????qa=pa->next;qb=pb->next;
?????while(qa&&qb){
????????if(qa->data.expn>qb->data.expn){
????????????rear->next=qa;
????????????rear=qa;
????????????qa=qa->next;
????????}
????????else?if(qa->data.expn<qb->data.expn){
????????????rear->next=qb;
????????????rear=qb;
????????????qb=qb->next;
????????}
????????else{
????????????if((qa->data.coef+qb->data.coef)){
????????????????qa->data.coef+=qb->data.coef;
????????????????rear->next=qa;
????????????????rear=qa;
????????????}
????????????qa=qa->next;
????????????qb=qb->next;
????????}
?????}
?????while(qa){
????????rear->next=qa;
????????rear=qa;
????????qa=qa->next;
?????}
?????while(qb){
????????rear->next=qb;
????????rear=qb;
????????qb=qb->next;
?????}
?????free(pb);
?????pb=NULL;
}
關(guān)于1002. A+B for Polynomials (25)的某些問題
mrs_empress
2017-03-19 14:24:51