怎么用链表实现多项式的相加
谁能帮帮我编个单链表的程序, 实现多项式相加 A=7+3X+9X*X*X; B=8X+22X*X; (我不会写X的次方,分开写了,希望能理解)这不是作业贴,我刚刚开始学数据库(C),希望能有人帮我。
#include<stdio.h> #include<malloc.h> typedef struct linklist { int coef;//系数 int exp; //指数 struct linklist *next; }nodelink; nodelink *create()//创建单链表 { nodelink *head,*s,*t; int c,e; head=(nodelink *)malloc(sizeof(nodelink));//哨兵头结点 head->next=NULL; t=head;//始终指向单链表的尾部 printf("请输入c和e的值,当系数e等于-1为结束条件:\n"); scanf("%d%d",&c,&e); while(e!=-1) { s=(nodelink *)malloc(sizeof(nodelink)); s->coef=c; s->exp=e; s->next=NULL; t->next=s; t=s; printf("请继续输入c和e的值,当系数e等于-1为结束条件:\n"); scanf("%d%d",&c,&e); } return head; } void printhead(nodelink *head)//输出连表数据 { nodelink *phead; phead=head->next;//指向第一个元素结点 int pcount=1;//结点计数器 while(phead!=NULL) { printf("第%d个结点的系数和指数分别为:",pcount); printf("%2d%4d\n",phead->coef,phead->exp); phead=phead->next; pcount++; } printf("\n"); } nodelink *ADD(nodelink *heada,nodelink *headb)//实现多项式相加 { nodelink *p,*q,*prea,*preb,*temp; int sum; p=heada->next;//分别使p和q指向第一个元素结点 q=headb->next; prea=heada; free(headb);//释放headb链表的头结点 while(p!=NULL&&q!=NULL) { if(p->exp<q->exp) { prea=p; p=p->next; } else if(p->exp==q->exp) { sum=p->coef+q->coef; if(sum!=0) { p->coef=sum; preb=q; prea=p; p=p->next; q=q->next; free(preb); } else//如果和为零 { temp=p; p=p->next; prea->next=p; free(temp); preb=q; q=q->next; free(preb); } } else //若p->exp大于q->exp { preb=q; q=q->next; preb->next=p; prea->next=preb; prea=prea->next; } } if(q!=NULL) prea->next=q; return heada; } void main() { nodelink *heada,*headb,*headc; heada=create(); printhead(heada); headb=create(); printhead(headb); headc=ADD(heada,headb); printf("相加后的的链表为:\n"); printhead(headc); }
#include<stdio.h> #include<malloc.h> #include<conio.h> typedef struct node{ int xi; int zi; struct node *next; }Node; Node *Creat() { //尾插法建立多项式链表 Node *head,*p,*pre; int fg,tag; head=(Node *)malloc(sizeof(Node)); head->next=NULL; pre=head; printf("请按照指数从小到大输入多项式并以0 0结束:\n"); scanf("%d%d",&fg,&tag); while(fg) { p=(Node *)malloc(sizeof(Node)); p->xi=fg; p->zi=tag; p->next=pre->next; pre->next=p; pre=p; scanf("%d%d",&fg,&tag); } if(fg==0&&tag==0) printf("\n输入结束:\n"); return head; } void Read(Node *head) //读取链表中的数据 { Node *p=head->next; while(p) { printf("%dX~%d->",p->xi,p->zi); p=p->next; } printf("NULL\n"); } Node *Add(Node *head1,Node *head2) { //多项式相加的实现 Node *p,*head,*p1,*p2;int sum; head=(Node *)malloc(sizeof(Node)); p=head; p1=head1->next; p2=head2->next; while(p1&&p2) //当两多项式都存在时 { if(p1->zi==p2->zi) //指数是否相等 相等怎么处理 { sum=p1->xi+p2->xi; if(sum) { p1->xi=sum; p->next=p1; p=p1; } p1=p1->next; p2=p2->next; } else //不相等分两种情况 { if(p1->zi<p2->zi) { //分别怎么处理 p->next=p1; p=p1; p1=p1->next; } else { p->next=p2; p=p2; p2=p2->next; } } } if(p1) p->next=p1; //将1中剩余结点接到和链表中 因为最终只剩下一段链表多项式,只需要将 else p->next=p2; //将2中剩余结点接到和链表中 这段链的链头接到目标链表就可以了 return head; } void main() { //主函数 Node *head,*p1,*p2; p1=Creat(); Read(p1); p2=Creat(); Read(p2); head=Add(p1,p2); printf("相加后为:\n"); Read(head); getch(); }这个方法不是我做的!上一个是我的