C++链表实现一元多项式(加法、减法、乘法)
运行结果如下:
#includeusing namespace std; typedef int T; class Node { public: T coef; //系数 T exp; //指数 Node* next; //指针域 }; class Link { public: Link(); ~Link(); void CreatLink(); void ShowLink(); void AddLink(Link& L1, Link& L2); void SubLink(Link& L1, Link& L2); void MulLink(Link& L1, Link& L2); void SortLink(); //按指数排序 private: Node* L; T length; }; Link::Link() { L = new Node; L->next = NULL; length = 0; } void Link::CreatLink() { Node* pnew = new Node; pnew->next = NULL; cout << "输入系数:" << " "; cin >> pnew->coef; cout << "输入指数:" << " "; cin >> pnew->exp; Node* ptemp = L; while (ptemp->next) { ptemp = ptemp->next; } ptemp->next = pnew; length++; } void Link::ShowLink() { Node* ptemp =L ; cout << "系数和指数分别为:" << " "; while (ptemp->next) { ptemp = ptemp->next; cout << ptemp->coef << " "; cout << ptemp->exp << " ;"; } cout << endl; } void Link::AddLink(Link& L1, Link& L2) { Node* t = L1.L; Node* ptemp = L1.L->next; Node* qtemp = L2.L->next; while (ptemp && qtemp) { if (ptemp->exp < qtemp->exp) { t->next = ptemp; t = ptemp; ptemp = ptemp->next; } else if (ptemp->exp > qtemp->exp) { t->next = qtemp; t = qtemp; qtemp = qtemp->next; } else { ptemp->coef += qtemp->coef; if (ptemp->coef) {//coef不等于0时 t->next = ptemp; //将修改后的ptemp当前节点链在t之后 t = ptemp; //t指向ptemp ptemp = ptemp->next; //ptemp指向下一项 qtemp = qtemp->next;//qtemp后移 } else { Node* r = ptemp; ptemp = ptemp->next; delete r; r = NULL; qtemp = qtemp->next; } } } if (!ptemp) { t->next = qtemp; } if (!qtemp) { t->next = ptemp; } } void Link::SubLink(Link& L1, Link& L2) { Node* t = L1.L; Node* ptemp = L1.L->next; Node* qtemp = L2.L->next; while (ptemp && qtemp) { if (ptemp->exp < qtemp->exp) { t->next = ptemp; t = ptemp; ptemp = ptemp->next; } else if (ptemp->exp > qtemp->exp) { t->next = qtemp; t = qtemp; qtemp = qtemp->next; } else { ptemp->coef -= qtemp->coef; if (ptemp->coef) {//coef不等于0时 t->next = ptemp; //将修改后的ptemp当前节点链在t之后 t = ptemp; //t指向ptemp ptemp = ptemp->next; //ptemp指向下一项 qtemp = qtemp->next;//qtemp后移 } else { Node* r = ptemp; ptemp = ptemp->next; delete r; r = NULL; qtemp = qtemp->next; } } } if (!ptemp) { t->next = qtemp; } if (!qtemp) { t->next = ptemp; } } void Link::MulLink(Link& L1, Link& L2) { Node* ptemp = L1.L; Node* qtemp = L2.L; Link Lnew; Node* tnew = Lnew.L; while (ptemp->next) { ptemp = ptemp->next; while (qtemp->next) { qtemp = qtemp->next; Node* pnew = new Node; pnew->next = NULL; pnew->exp = ptemp->exp + qtemp->exp; pnew->coef = (ptemp->coef) * (qtemp->coef); tnew->next = pnew; tnew = tnew->next; } qtemp = L2.L; } Lnew.SortLink(); Lnew.ShowLink(); } void Link::SortLink() { Node* ptemp = L->next; while (ptemp) { Node* qtemp = ptemp->next; while (qtemp) { if (ptemp->exp < qtemp->exp) { qtemp = qtemp->next; } else if (ptemp->exp > qtemp->exp) { int c = 0; int e = 0; c = ptemp->coef; e = ptemp->exp; ptemp->coef = qtemp->coef; ptemp->exp = qtemp->exp; qtemp->coef = c; qtemp->exp = e; qtemp = qtemp->next; } else { ptemp->coef += qtemp->coef; Node* pnew = qtemp; qtemp = qtemp->next; ptemp->next = qtemp; delete pnew; pnew = NULL; } } ptemp = ptemp->next; } } Link::~Link() { Node* ptemp = L->next; while (ptemp) { L->next = ptemp->next; ptemp = L->next; } length = 0; } int main() { Link s1, s2; s1.CreatLink(); s1.CreatLink(); s1.CreatLink(); s1.ShowLink(); s1.SortLink(); s1.ShowLink(); s2.CreatLink(); s2.CreatLink(); s2.SortLink(); s2.ShowLink(); s1.MulLink(s1, s2); system("pause"); return 0; }



