数据结构,一元多项式的求和问题。

一元多项式的求和

时间限制: 1 Sec 内存限制: 128 MB
[提交]
题目描述
一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的两个一元多项式求和,并输出求和的结果。
输入
输入为两个一元多项式,每个一元多项式输入一行,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。系数和指数均为整数,指数不小于0。
输出
输出为求和结果多项式,按照降幂依次输出每个单项的系数和指数,每个数值后面用一个空格隔开,输出结果多项式后换行。 系数为0的单项式不得输出——除非结果多项式就是0,则直接输出0。
样例输入
2 7 3 5 12 1 6 0 -1 -1
7 5 9 4 3 0 -1 -1
样例输出
2 7 10 5 9 4 12 1 9 0

第1个回答  2015-10-06
我写的代码写成了两个文件了,
这个是 多项式加法list.h
#include<malloc.h>
typedef struct node
{
int coef;
int exp;
struct node *next;
}listnode;

void creat(listnode *&L)
{
listnode *p,*q;
int coef,exp;
L=(listnode*)malloc(sizeof(listnode));
p=L;

while(scanf("%d%d",&coef,&exp)==2&&exp>=0)
{
q=(listnode*)malloc(sizeof(listnode));
q->coef=coef;
q->exp=exp;
p->next=q;
p=q;
}
p->next=NULL;
}

void print(listnode *L)
{
listnode *p;
p=L->next;
while(p!=NULL)
{
if(p->coef!=0)
{
printf("[ %d %d ] ",p->coef,p->exp);
}
p=p->next;
}
printf("\n");
}
void hebing(listnode*&L1,listnode *&L2)
{
listnode *temp=L1;
while(temp->next!=NULL)
{
temp=temp->next;
}
if(L2->next!=NULL)
{
temp->next=L2->next;
}
}
void destroy(listnode *&L)
{
listnode *p=L,*q=L->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
void sortadd(listnode *&L)
{
listnode *p,*q,*pre;
p=L->next->next;
L->next->next=NULL;
while(p!=NULL)
{
q=p->next;
pre=L;
while( pre->next!=NULL && pre->next->exp>p->exp )
{
pre=pre->next;
}
if(pre->next!=NULL&&pre->next->exp==p->exp)
{
pre->next->coef+=p->coef;
free(p);
p=q;
}
else
{
p->next=pre->next;
pre->next=p;
p=q;
}
}
}
还有个 多项式加法main
#include<stdio.h>
#include<malloc.h>
#include "list.h"
int main()
{
listnode *L1=NULL;
listnode *L2=NULL;
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
creat(L1);
creat(L2);
hebing(L1,L2);
sortadd(L1);
print(L1);
}
return 0;
}
望采纳谢谢本回答被提问者和网友采纳
相似回答