您的位置:首页 > 其它

一元N次多项式的表示及相加

2014-08-21 09:01 387 查看
                                    线性表 — 一元n次多项式的表示与相加

这里用线性链表的基本操作来实现一元多项式的运算:

 

//一元N次多项式相加
#include<stdio.h>
#include<stdlib.h>

typedef struct tagpolyn{
float coef;              //系数
int expn;                //指数
struct tagpolyn *next;
}polyn,*LinkList;
//创建链表函数
void CreatPolyn(LinkList *L)
{
LinkList q,s;
*L=(LinkList)malloc(sizeof(polyn));
(*L)->next=*L;
for(;;){
s=(LinkList)malloc(sizeof(polyn));
scanf("%f%d",&s->coef,&s->expn);
if(s->coef==0 && s->expn==0)break;    //当输入数据0 0时结束此循环
else{
q=*L;
while((q->next != *L)&&(s->expn < q->next->expn))q=q->next; //按指数由大到小插入链表。
s->next=q->next;
q->next=s;
}
}
}
//链表连接函数
void AddPolyn(LinkList La,LinkList Lb,LinkList *Lc)
{
*Lc=(LinkList)malloc(sizeof(polyn));
(*Lc)->next=NULL;
LinkList qa=La->next,qb=Lb->next,qc=*Lc;
while(qa!=La && qb!=Lb){  //当qa与qb都没有等于头结点时,进行以下操作。
if(qa->expn == qb->expn)
{
qa->coef+=qb->coef;
qc->next=qa;
qc=qa;
qa=qa->next;
qb=qb->next;
}
else if(qa->expn < qb->expn)
{
qc->next=qb;
qc=qb;
qb=qb->next;
}
else {
qc->next=qa;
qc=qa;
qa=qa->next;
}
}
if(qa!=La){// 当Lb链表插入完后,La还有剩余数据,则将这些数据接在lc的后面。
while(qa!=La){
qc->next=qa;
qc=qa;
qa=qa->next;
}
}
else{     // 当La链表结束后,Lb还有剩余数据,则将这些数据接在lc的后面。
while(qb!=Lb){
qc->next=qb;
qc=qb;
qb=qb->next;
}
}
qc->next=*Lc;
}
//链表输出函数
void PrintList(LinkList *head)
{
polyn *p;
p=*head;
while(1){//因为要输出的链表都是循环链表,因此输出控制条件应该是当指针不是指向头结点时。
printf("%.2f*x^%d",p->next->coef,p->next->expn);
p=p->next;
if(p->next!=*head){
printf(" + ");
}
else break;
}
printf("\n");
}

int main()
{
LinkList pa,pb,pc;
printf("请输入第一个多项式(以0 0结尾):\n");
CreatPolyn(&pa);
printf("请输入第二个多项式(以0 0结尾):\n");
CreatPolyn(&pb);
printf("f1(x) = ");
PrintList(&pa);
printf("f2(x) = ");
PrintList(&pb);
AddPolyn(pa,pb,&pc);
printf("f1(x)+f2(x)的结果为:\nf(x) = ");
PrintList(&pc);
return 0;
}

以下是演示结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: