# include "iostream"
# include "iomanip"
using namespace std;
/** 多项式表示 ***/
typedef struct Term {
float coef; // 系数
int expn; //指数
} Term; // 项类型
typedef Term T;
typedef struct LNode
{
T data;
LNode * next;
} LNode, *List; // List 即为链表表示的多项式类型
void InitList(List &L); // 初始化
void CreateList(List &L); //正向生成链表各结点 (生成多项式)
void Output(List L); // 输出多项式
//多项式 La 《== La + Lb
void AddPolyn(List &La, List &Lb)
{
LNode *ha = La;
LNode *pa = La->next; //ha是La的前一个节点
LNode *pc = La;
LNode *hb = Lb;
LNode *pb = Lb->next; //hb是Lb的前一个节点
float sum = 0.0;
while (pa && pb)
{
if (pa->data.expn < pb->data.expn)
{
pc->next = pa;
pc = pa;
ha = pa;
pa = pa->next;
}
else if (pa->data.expn > pb->data.expn)
{
pc->next = pb;
pc = pb;
hb = pb;
pb = pb->next;
}
else
{
sum = pa->data.coef + pb->data.coef;
if (sum == 0.0)
{
ha->next = pa->next;
delete pa;
pa = ha->next;
hb->next = pb->next;
delete pb;
pb = hb->next;
}
else
{
pc->next = pa;
pc = pa;
ha = pa;
pa = pa->next;
pc->data.coef = sum;
hb->next = pb->next;
delete pb;
pb = hb->next;
}
}
}
pc->next = pb ? pb : pa;
}
// 初始化链表L (多项式)
void InitList(List &L)
{
L = new LNode;
L->next = NULL;
}
//正向生成链表各结点 (读取数据,生成多项式L)
void CreateList(List &L)
{
LNode *tail = L;
T e;
while (cin >> e.expn >> e.coef && e.expn != -1)
{
LNode * p = new LNode;
p->data = e;
p->next = NULL;
tail->next = p;
tail = p;
}
}
// 输出多项式
void Output(List L)
{
LNode *p;
for (p = L->next; p; p = p->next)
cout << setw(5) << p->data.coef << " X^" << setw(2) << p->data.expn << " ";
cout << endl << endl;
}
void main()
{
freopen("data.in", "r", stdin); // 从文件中读取数据
// 生成多项式La
List La;
InitList(La);
CreateList(La);
Output(La);
// 生成多项式Lb
List Lb;
InitList(Lb);
CreateList(Lb);
Output(Lb);
AddPolyn(La, Lb); // La + Lb 结果至 La中
Output(La); // 输出结果
cout << endl;
}
AddPolyn函数好像有点问题,最后运行结果出错,求大神解答