#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct
{
int coef; //係數項
int exp; //指數項
}ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}LNode,*LinkList;
void InitList(LinkList &L);
void PolyCreate(LinkList l);
void Output(LinkList l);
LinkList PolyAdd(LinkList La,LinkList Lb);
LinkList Multiply(LinkList l,int coef,int exp);
LinkList PolyMultiply(LinkList la,LinkList lb);
void ShowMenu()
{
cout<<"1、演示一元多項式的加法:"<<endl;
cout<<"2、演示一元多項式的乘法:"<<endl;
cout<<"0、退出"<<endl;
}
int main()
{
ShowMenu();
int x;
while(1)
{
cout<<"請輸入你要進行的操作:";
cin>>x;
switch(x)
{
case 1:{
LinkList l;
InitList(l);
PolyCreate(l);
Output(l);
LinkList L;
InitList(L);
PolyCreate(L);
Output(L);
LNode *p = PolyAdd(l,L);
cout<<"相加後的多項式爲:"<<endl;
Output(p);
break;
}
case 2:{
LinkList l1;
InitList(l1);
PolyCreate(l1);
Output(l1);
LinkList l2;
InitList(l2);
PolyCreate(l2);
Output(l2);
LNode *temp = PolyMultiply(l1,l2);
cout<<"相乘後的多項式爲:"<<endl;
Output(temp);
break;
}
case 0:{
exit(0);
break;
}
}
}
return 0;
}
void InitList(LinkList &L)
{
L = new LNode;
L->next = NULL;
}
void PolyCreate(LinkList l)
{
int c,e;
LNode *p = l;
cout<<"請按照指數遞增的順序建立該一元多項式:"<<endl;
while(1)
{
cout<<"input the coef,exp of term ,exp=-1 will end:"<<endl;
cin>>c;
cin>>e;
if(e==-1)
break;
LNode *s = new LNode;
s->data.coef = c;
s->data.exp = e;
p->next = s;
p = s;
}
p->next = NULL;
}
void Output(LinkList l)
{
cout<<"The poly is:"<<endl;
LNode *p;
p=l->next;
while(p)
{
cout<<p->data.coef;
if(p->data.exp)
cout<<"X^"<<p->data.exp;
if(p->next && p->next->data.coef>0)
cout<<"+";
p = p->next;
}
cout<<"\n";
}
LinkList PolyAdd(LinkList La,LinkList Lb)
{
LNode *p,*q,*tail,*temp;
int sum;
p = La->next;
q = Lb->next;
tail = La;
while(p && q)
{
if(p->data.exp<q->data.exp)
{
tail->next = p;
tail = p;
p = p->next;
}
else if(p->data.exp == q->data.exp)
{
sum = p->data.coef+q->data.coef;
if(sum!=0)
{
p->data.coef = sum;
tail->next = p; tail = p;
p = p->next;
temp = q; q = q->next;
delete temp;
}
else //若係數和爲0,刪除節點p,q;並將指針指向下一個節點
{
temp = p; p = p->next; delete temp;
temp = q; q = q->next; delete temp;
}
}
else
{
tail->next = q;
tail = q;
q = q->next;
}
}
if(p)
tail->next = p;
else
tail->next = q;
delete Lb;
return La;
}
//多項式與單項式相乘,該單項式爲coef X^exp
LinkList Multiply(LinkList l,int coef,int exp)
{
LNode *p,*q;
LinkList Poly = new LNode;
p = Poly;
q = l->next;
while(q)
{
p->next = new LNode;
p = p->next;
p->data.coef = (q->data.coef*coef);
p->data.exp = (q->data.exp+exp);
q = q->next;
}
p->next = NULL;
return Poly;
}
//多項式與多項式相乘
LinkList PolyMultiply(LinkList la,LinkList lb)
{
LinkList Poly;
InitList(Poly);
LNode *p = lb->next;
while(p)
{
PolyAdd(Poly,Multiply(la,p->data.coef,p->data.exp));
p = p->next;
}
return Poly;
}
一元多項式的加法和乘法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.