看严蔚敏的《数据结构》的书,第二章讲链表的时候介绍可以用链表来保存多项式的每一项(系数和指数),然后计算两个多项式的加减乘除,于是用C语言实现了其中的多项式加法的操作,这里把程序介绍一下。
首先是定义数据结构保存多项式的一项。
typedef struct _PolyItem
{
float Coef; //系数
int Expn; //指数
struct _PolyItem* pNext; //下一个节点指针
}PolyItem,*pPolyItem;
接下来是主程序:
PolyItem poly1st;// 第一个多项式的头
PolyItem poly2st;// 第二个多项式的头
// 通知用户输入第一个和第二个多项式
InitPolyNomial(&poly1st);
InitPolyNomial(&poly2st);
// 计算多项式加法
printf("开始计算多项式的和\n");
pPolyItem pTemp=NULL;
PolyItem result;
pTemp=&result;
pPolyItem p1st=poly1st.pNext;
pPolyItem p2st=poly2st.pNext;
// 开始计算和
while(p1st!=NULL && p2st!=NULL)
{
// 合并同类项
if(p1st->Expn==p2st->Expn)
{
float fltResult=p1st->Coef+p2st->Coef;
if(fltResult!=0)
{
pTemp->pNext=CreateNode(fltResult,p1st->Expn);
pTemp=pTemp->pNext;
}
p1st=p1st->pNext;
p2st=p2st->pNext;
}
else
{
// 指数不同的项按照指数从小到大排列
if(p1st->Expn>p2st->Expn)
{
pTemp->pNext=CreateNode(p2st->Coef,p2st->Expn);
pTemp=pTemp->pNext;
p2st=p2st->pNext;
}
else
{
pTemp->pNext=CreateNode(p1st->Coef,p1st->Expn);
pTemp=pTemp->pNext;
p1st=p1st->pNext;
}
}
}
// 如果其中某一个多项式还有多余的项,则添加到结果的尾部
if(p1st!=NULL)
{
while(p1st!=NULL)
{
pTemp->pNext=CreateNode(p1st->Coef,p1st->Expn);
pTemp=pTemp->pNext;
p1st=p1st->pNext;
}
}
if(p2st!=NULL)
{
while(p2st!=NULL)
{
pTemp->pNext=CreateNode(p2st->Coef,p2st->Expn);
pTemp=pTemp->pNext;
p2st=p2st->pNext;
}
}
下面计算多项式0.25+2x+3x^3和10+1.5x+3x^2+4x^4的值:
首先是输入数据:

最后是计算结果
