C++链表实现一元多项式(加法、减法、乘法)

运行结果如下:

#include<iostream>
using 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;
}
&spm=1001.2101.3001.5002&articleId=124899797&d=1&t=3&u=75ff43469d504f468b971e12bb0ea832)
4651

被折叠的 条评论
为什么被折叠?



