c++实现链式存储结构实现一元多项式的加法运算
2017-09-29 12:23
435 查看
使用顺序存储结构或链式存储结构实现一元多项式的加法运算。
采用链式结构实现的
采用链式结构实现的
#include <iostream> using namespace std; struct Node { int coef; int exp; Node *next; }; //初始化 void InitList(Node * &L) { L = new Node; L->next = NULL; L->coef = 0; L->exp = 0; } //在多项式链表的第i个位置插入结点 void InsertNode(Node *& L, int c, int e, int i) { Node *p, *q; int j = 1; q = new Node; q->coef = c; q->exp = e; q->next = NULL; p = L; while (j <= i) { p = p->next; ++j; } q->next = p->next; p->next = q; } //按指数非递减给多项式排序 void SortList(Node *&L) { Node *p, *q, *pre; p = L->next; L->next = NULL; while (p != NULL) { if (L->next == NULL) //处理第一个结点 { L->next = p; p = p->next; L->next->next = NULL; } else //处理剩余其他结点 { pre = L; q = pre->next; while (q && q->exp < p->exp) { pre = q; q = q->next; } q = p->next; p->next = pre->next; pre->next = p; p = q; } } } void print(Node * L) { SortList(L); Node *p; p = L->next; while (p != NULL) { cout << p->coef << "x^" << p->exp << "+"; p = p->next; } cout << endl; } Node *AddPoly(Node *L1, Node *L2) //一元多项式相加 { Node *pa, *pb, *s, *pc, *p; Node *tc; //创建尾节点 pc = new Node; pc->next = NULL; /*pc为新建单链表的头结点*/ tc = pc; /*tc始终指向新建单链表的最后结点*/ pa = L1->next; pb = L2->next; //获得多项式单链表的第一个结点 while (pa != NULL && pb != NULL) //pa,pb都不为空,就进行比较,否则,跳出while { if (pa->exp < pb->exp) //将*pa结点复制到*s并链到pc尾 { s = new Node; s->coef = pa->coef; s->exp = pa->exp; s->next = NULL; tc->next = s; tc = s; pa = pa->next; } else if (pa->exp > pb->exp) //将*pb结点复制到*s并链到pc尾 { s = new Node; s->coef = pb->coef; s->exp = pb->exp; s->next = NULL; tc->next = s; tc = s; pb = pb->next; } else //pa->expn=pa->expn时的情况 { if (pa->coef + pb->coef != 0) //如果相加系数之和不为0,则将新结点插在tc后面 { s = new Node; s->coef = pa->coef + pb->coef; s->exp = pa->exp; s->next = NULL; tc->next = s; tc = s; } pa = pa->next; //跳过当前的结点,继续后面的结点的比较 pb = pb->next; } } //将尚未扫描完的余下结点复制并链接到pc单链表之后 if (pa != NULL) //pb为空 p = pa; else //pa为空 p = pb; while (p != NULL) { s = new Node; s->coef = p->coef; s->exp = p->exp; s->next = NULL; tc->next = s; tc = s; p = p->next; } return pc; } int main() { int c1[] = { 3, 7, 9, 5 }, c2[] = { 8, 22, -9 }; int e1[] = { 2, 1, 8, 7 }, e2[] = { 9, 0, 8 }; Node *la, *lb, *lc; int k; InitList(la); InitList(lb); InitList(lc); for (k = 0; k < 4; k++) InsertNode(la, c1[k], e1[k], k); for (k = 0; k < 3; k++) InsertNode(lb, c2[k], e2[k], k); cout << "多项式A:"; print(la); cout << "多项式B:"; print(lb); cout << "多项式相加的结果为:" << endl; lc = AddPoly(la, lb); print(lc); return 0; }
![](https://dn-simplecloud.shiyanlou.com/uid/33431/1506658713267.png-wm)
相关文章推荐
- 一元多项式加法与乘法运算链表实现
- PAT 一元多项式的乘法与加法运算(链表 c++版)
- 线性链表实现一元多项式的加法运算
- 一元多项式的乘法与加法运算——链表实现
- 【数据结构_链表_List_1040】一元多项式加法运算的实现
- PAT 3-04 一元多项式的乘法与加法运算(C语言实现)
- 一元多项式的乘法与加法运算【Java实现--通过单项链表实现队列】
- 【数据结构】C++链表实现一元多项式的加法
- 用链表实现一元多项式的加法运算
- 多项式的加法和乘法算术运算的C++实现
- C++ 02-线性结构2 一元多项式的乘法与加法运算
- 一元多项式的加法和乘法运算(Java实现)——浙大数据结构(陈越)
- java单链表实现一元多项式加法和乘法运算
- PAT 一元多项式的乘法与加法运算(链表 c++版)
- 一元多项式的乘法运算(C语言)实现
- 02-线性结构1 一元多项式的乘法与加法运算
- PTA习题 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- PAT3-04. 一元多项式的乘法与加法运算