链表 一元多项式求和 c语言,单链表之一元多项式求和C++实现(示例代码)

单链表之一元多项式求和

一元多项式求和单链表实现伪代码

1、工作指针 pre、p、qre、q 初始化

2、while(p 存在且 q 存在)执行下列三种情况之一:

2.1、若 p->exp < q->exp:指针 p 后移;

2.2、若 p->exp > q->exp,则

2.2.1、将结点 q 插到结点 p 之前

2.2.2、指针 p 指向他原指结点的下一个结点;

2.3、若 p->exp == q->exp,则

2.3.1、p->coef = p->coef + q->coef

2.3.2、若 p->coef == 0,则执行下列操作,否则指针 p 后移,

2.3.2.1、删除结点 p

2.3.2.2、使指针 p 指向它原指结点的下一个结点

2.3.3、删除结点 q

2.3.4、使指针 q 指向它原指结点的下一个结点

3、如果 q 不为空,将结点 q 链接在第一个单链表的后面。

一、一元多项式求和单链表实现头文件:PolynomialOfOneIndeterminateAdd.h

//一元多项式求和头文件

#include

using namespace std;

template

//定义单链表结点

struct Node

{

//数据域:非零项的系数和指数

DataType coef, exp;

//指针域

Node *next;

};

//定义存放一元多项式的类

template

class Linklist

{

private:

Node *first;

//一元多项式的项数

int size;

public:

//构造函数

Linklist();

//初始化一元多项式

void Init();

//输出一元多项式

void Print();

//定义一元多项式的的加法操作

Linklist operator+(Linklist &p2);

};

//构造函数

template

Linklist::Linklist()

{

first = new Node;

first = NULL;

size = 0;

}

//实现一元多项式单链表的初始化

template

void Linklist::Init()

{

cout << "多项式的元素个数为:";

cin >> size;

DataType x, y;

cout << "请输入第1项的系数:";

cin >> x;

cout << "请输入第1项的指数:";

cin >> y;

Node *m;

m = new Node;

m->coef = x;

m->exp = y;

m->next = NULL;

first = m;

for (int i = 2; i <= size; i++)

{

cout << "请输入第" << i << "项的系数:";

cin >> x;

cout << "请输入第" << i << "项的指数:";

cin >> y;

Node *n;

n = new Node;

n->coef = x;

n->exp = y;

n->next = NULL;

m->next = n;

m = n;

}

}

//实现一元多项式单链表实的输出

template

void Linklist::Print()

{

Node *m = first;

while (m != NULL)

{

if (m == first)

{

if (m->coef != 0 && m->exp != 0)

{

cout << m->coef << "x^" << m->exp;

}

else if (m->coef != 0 && m->exp == 0)

{

cout << m->coef;

}

}

else

{

if (m->coef > 0 && m->exp != 0){

cout << "+" << m->coef << "x^" << m->exp;

}

else if (m->coef<0 && m->exp != 0)

{

cout << m->coef << "x^" << m->exp;

}

else if (m->coef>0 && m->exp == 0)

{

cout << "+" << m->coef;

}

else if (m->coef < 0 && m->exp == 0)

{

cout << m->coef;

}

}

m = m->next;

}

cout << endl;

}

//实现一元多项式单链表的相加

template

Linklist Linklist::operator+(Linklist &p2)

{

//声明工作指针

Node *pre, *p, *qre, *q;

//初始化工作指针

pre = this->first;

p = pre->next;

qre = p2.first;

q = qre->next;

while (p != NULL&&q != NULL)

{

//p->exp < q->exp:指针 p 后移

if (p->exp < q->exp)

{

pre = p;

p = p->next;

}

//p->exp > q->exp:将结点 q 插到结点 p 之前,指针 p 指向他原指结点的下一个结点

if (p->exp > q->exp)

{

Node *s;

s = q->next;

pre->next = q;

q->next = p;

q = s;

}

//p->exp == q->exp:

if (p->exp == q->exp)

{

//p->coef = p->coef + q->coef

p->coef = p->coef + q->coef;

if (p->coef == 0)

{

//使指针 p 指向它原指结点的下一个结点

pre->next = p->next;

//删除结点 p

delete p;

p = p->next;

}

else

{

pre = p;

p = pre->next;

}

//使指针 q 指向它原指结点的下一个结点

qre->next = q->next;

//删除结点 q

delete q;

q = qre->next;

}

}

//如果 q 不为空,将结点 q 链接在第一个单链表的后面。

if (q != NULL)

{

pre->next = q;

delete p2.first;

}

return *this;

}

二、测试一元多项式单链表实现的源程序:TestPolynomialOfOneIndeterminateAdd.cpp

#include

//引入一元多项式之单链表实现的头文件

#include "PolynomialOfOneIndeterminateAdd.h"

using namespace std;

int main()

{

//声明一元多项式单链表

Linklist p1, p2, p3;

cout << "请按指数由小到大的顺序定义多项式A(x):" << endl;

p1.Init();

cout << "输入的多项式A(x)为:";

p1.Print();

cout << "\n请按指数由小到大的顺序定义多项式B(x):" << endl;

p2.Init();

cout << "输入的多项式B(x)为:";

p2.Print();

//一元多项式相加

p3 = p1 + p2;

cout << "\n多项式A(x)和多项式B(x)的和为:" << endl;

p3.Print();

return 0;

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值