程序代码:
#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(); }看看这个