一元多项式合并

Warren_W 2015-09-29 09:25:29

# 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函数好像有点问题,最后运行结果出错,求大神解答

...全文
126 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Warren_W 2015-09-30
  • 打赏
  • 举报
回复
引用 1 楼 悟er的回复:
把错误贴出来吧
运行结果,合并后少了一个节点
Warren_W 2015-09-30
  • 打赏
  • 举报
回复
引用 1 楼 悟er的回复:
把错误贴出来吧
有些情况结果错误,有些情况正确
Warren_W 2015-09-30
  • 打赏
  • 举报
回复
有些情况结果错误,有些情况正确
ztenv 版主 2015-09-30
  • 打赏
  • 举报
回复
把错误贴出来吧

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧