数据结构多项式加法java_数据结构之单链表实现多项式加法

#includeusing namespace std;

typedef struct polynode

{

int exp;//指数

int xishu;//系数

polynode* next;//指针,指向下一个节点

}polynode,*polylist;

/*

polylist headmethodCreate(polylist &L)//头插法

{

polynode *s;

int e;

int xi;

L = (polylist)malloc(sizeof(polynode));

L->next = NULL;

cin >> xi;

cin >> e;

while (e != 999)

{

s = (polynode*)malloc(sizeof(polynode));

s->exp = e;

s->xishu = xi;

s->next = L->next;

L->next = s;

cin >> xi;

cin >> e;

}

return L;

}

*/

polylist tailmethodCreate(polylist &L)//尾插法自行输入数据建立新表

{

polynode *s;//辅助指针

polynode *tail;//尾节点辅助指针

int e;

int xi;//定义系数和指数

L = (polylist)malloc(sizeof(polynode));//动态创建一个节点指针

L->next = NULL;

tail = L;

cin >> xi;//输入系数和指数

cin >> e;

while (e != 999)

{

s = (polynode*)malloc(sizeof(polynode));

s->next = NULL;

s->exp = e;

s->xishu = xi;

tail->next = s;

tail = s;

//s->next = L->next;

//L->next = s;

cin >> xi;

cin >> e;

}

//delete(tail);

return L;

}

polylist insertnew(polylist &L,polynode* &tail,int xishu1,int exp1)//尾插法给定数值数据建立新表

{

polynode* s;

s = (polynode*)malloc(sizeof(polynode));

s->next = NULL;

s->xishu = xishu1;

s->exp = exp1;

tail->next = s;

tail = s;

return L;

}

void outputall(polylist L)//全部输出

{

while ( L->next!=NULL)

{

cout << L->next->xishu exp

}

cout << "end" << endl;

//cout << "end" << endl;

}

/*polynode* gethead(polylist L)

{

return L;

}

*/

polylist jiafa(polylist L1, polylist L2, polylist &L3)

{//多项式加法:pa=pa+pb,利用两个多项式的结点构成一个新的多项式

polynode* pa;

polynode* pb;

//polynode* pc;

//int xishuc;

//polylist L3;

L3= (polynode*)malloc(sizeof(polynode));

L3->next = NULL;

polynode* tail;

//int xi, e;

//L = (polynode*)malloc(sizeof(polynode));

tail = L3;

pa = L1;

pb = L2;

//pc = L3;

//int xisuhe;

while (pa->next!= NULL && pb->next!= NULL)//pa,pb都存在

{

if (pa->next->exp == pb->next->exp)//指数相等,系数相加

{

insertnew(L3, tail,pa->next->xishu + pb->next->xishu, pa->next->exp);

pa = pa->next;

pb = pb->next;

}

else if (pa->next->exp < pb->next->exp)//指数小的插入,并且指针后移

{

insertnew(L3, tail, pa->next->xishu , pa->next->exp);

pa = pa->next;

}

else

{

insertnew(L3, tail, pb->next->xishu, pb->next->exp);

pb = pb->next;

}

}

while(pa->next != NULL)//只有pa存在,插入pa

{

insertnew(L3, tail, pa->next->xishu, pa->next->exp);

pa = pa->next;

}

while (pb->next != NULL)//只有pb存在,插入pb

{

insertnew(L3, tail, pb->next->xishu, pb->next->exp);

pb = pb->next;

}

return L3;

}

void jianfa(polylist &L1, polylist &L2)

{

}

int main()

{

//int end1;

polylist link1;

polylist link2;

polylist link3;

cout << "请输入多项式1:" << endl;

tailmethodCreate(link1);

outputall(link1);

cout << "请输入多项式2:" << endl;

tailmethodCreate(link2);

outputall(link2);

cout << "多项式和:" << endl;

outputall(jiafa(link1,link2,link3));

//cin >> end1;

//system("pause");//使输出窗口停留

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值