单链表的多项式创建和相加
#includestdio.h #includeiostream #include windows.h // 必须放在最前面或至少在 SetConsoleOutputCP 之前 using namespace std; typedef struct PLnode { int coef;//系数 int exp;//指数 struct PLnode* next; }PLnode, * Polynomial; void CreatList(Polynomial p, int n) { p new PLnode; p-next NULL; for (int i 0; i n; i) { PLnode* s new PLnode; cin s-coef s-exp; PLnode* pre p; PLnode* q p-next; while (q q-exp s-exp) { pre q; q q-next; } if (q q-exp s-exp) // 如果指数相同合并系数 { q-coef s-coef; delete s; } else // 插入新项 { s-next q; pre-next s; } } } void addlist(Polynomial pa, Polynomial pb) { PLnode* p1 pa-next; PLnode* p2 pb-next; PLnode* p3 pa; PLnode* r; int sum; while (p1 p2) { if (p1-exp p2-exp) { sum p1-coef p2-coef; if (sum ! 0) { p1-coef sum; p3-next p1; p3 p1; p1 p1-next; } else { r p1; p1 p1-next; delete r; } r p2; p2 p2-next; delete r; } else if (p1-exp p2-exp)//直接把p2插入到p1前面就行了 { p3-next p2; p3 p2; p2 p2-next; } else//p1-nextp2-next { p3-next p1; p3 p1; p1 p1-next; } } p3-next p1 ? p1 : p2; delete pb; } void printlist(Polynomial P) { PLnode* p P-next; if (!p) { cout 0 endl; return; } while (p) { if (p ! P-next p-coef 0) { cout ; } if (p-coef ! 0) { if (p-exp 0) cout p-coef; else if (p-exp 1) cout p-coefx; else cout p-coef x^ p-exp; } p p-next; } cout endl; } int main() { SetConsoleOutputCP(65001); // 输出代码页 - UTF-8 Polynomial pa, pb; int n1, n2; cout 请输入多项式A的项数; cin n1; cout 请依次输入多项式A的系数和指数: endl; CreatList(pa, n1); cout 请输入多项式B的项数: ; cin n2; cout 请依次输入多项式B的系数和指数): endl; CreatList(pb, n2); cout 多项式A: ; printlist(pa); cout 多项式B: ; printlist(pb); addlist(pa, pb); cout AB ; printlist(pa); return 0; }该部分分为主函数多项式的建立多项式的相加打印共四个部分。主函数创建提示句多项式次数的输入以及调用其余三个部分的函数。接着是多项式的建立以for进行输入的循环以while进行结点的插入排序此处分为三个部分),再者就是多项式的相加需要确定相加的位置根据指数判断。最后进行函数的打印操作首先是打印符号注意开头不能打印符号分别讨论指数为0为1的情况以及其他的情况
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2558941.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!