基于带头结点单链表的多项式运算

复习数据结构,延伸了课本中的内容,实现了多项式的相加和相乘。

#include<iostream>
using namespace std;
typedef struct Node{    //构造存储多项式的单链表
	int coefficient;
	int index;
	struct Node *next;
}Node,*Link;

class Polynomial{    //定义多项式链表类
private:
	Link c;
public:
	void InitLink(Link p);      //链表初始化
    void Add(Link p1,Link p2);  //多项式相加
	Link Mul(Link p1,Link p2);  //多项式相乘
	Link CreateLink(Link p,int data1,int data2);    //建立链表保存多项式
	void PrintLink(Link p);     //打印多项式的链表
	void  Menu();               //doc窗口菜单    
	void GetLink(Link p1);      //输入
	void SortLink(Link q);       //指数从大到小排序
	void Combine(Link p);        //合并多项式中的同类项
	Link DeepCopy(Link p);      //深度复制
};

void Polynomial::InitLink(Link p){
    p->next=NULL;
}

void Polynomial::Add(Link p1,Link p2){
	SortLink(p1);
	SortLink(p2);
	Node *m,*n,*pre,*rep;
	pre=p1;
	m=p1->next;
	n=p2->next;
	while(m!=NULL&&n!=NULL){
		if(m->index<n->index){
			rep=n->next;
			n->next=m;
			pre->next=n;
			pre=n;
			n=rep;
		}
		else if(m->index>n->index){
			pre=m;
			m=m->next;
		}
		else{
			m->coefficient+=n->coefficient;
			if(m->coefficient==0){
				Node *temp1,*temp2;
				temp1=m;
				temp2=n;
				pre->next=m->next;
				m=m->next;
				delete temp1;
			
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 多项式加法算法: 1. 定义两个指针p和q分别指向两个多项式头结点。 2. 定义一个新的链表用于存储结果,定义一个指针r指向结果链表的头结点。 3. 当p和q都不为空时,比较p和q的指数大小,将指数较小的项插入结果链表中,指针p或q向后移动一位。 4. 当p或q为空时,将另一个多项式的剩余项插入结果链表中。 5. 返回结果链表。 多项式乘法算法: 1. 定义两个指针p和q分别指向两个多项式头结点。 2. 定义一个新的链表用于存储结果,定义一个指针r指向结果链表的头结点。 3. 当p不为空时,遍历q中的每一项,将p和q的项相乘,将结果插入结果链表中。 4. 当q不为空时,遍历p中的每一项,将p和q的项相乘,将结果插入结果链表中。 5. 返回结果链表。 显示多项式算法: 1. 定义一个指针p指向多项式头结点。 2. 遍历多项式中的每一项,输出系数和指数。 3. 如果指数不为,则输出"x^"和指数。 4. 如果指数为,则不输出"x^"。 5. 输出换行符。 6. 返回。 ### 回答2: 使用头结点单链表存储多项式可以定义如下的结点结构体: ```cpp struct PolynomialNode { int coefficient; // 系数 int exponent; // 指数 PolynomialNode* next; // 下一个结点 }; ``` 使用这个结构体定义的链表,头结点单链表头结点的下一个指向第一项多项式多项式加法算法如下: 1. 创建一个新的头结点单链表保存结果。 2. 分别初始化两个指针指向两个多项式的第一个结点。 3. 通过比较两个当前指向的指数,将较小的指数的结点添加到结果链表,并将指向较小指数的指针指向下一个结点。 4. 如果有一个多项式还有剩余项,将其全部添加到结果链表。 5. 返回结果链表。 多项式乘法算法如下: 1. 创建一个新的头结点单链表保存结果。 2. 分别初始化两个指针指向两个多项式的第一个结点。 3. 循环遍历第一个多项式的每一项,对于每一项,在第二个多项式中遍历每一项,计算乘积,并将乘积添加到结果链表。 4. 返回结果链表。 显示多项式算法如下: 1. 初始化一个指针指向多项式的第一个结点。 2. 循环遍历每一个结点,输出系数和指数。 3. 结束。 这样就可以使用头结点单链表存储多项式,并实现多项式加法乘法显示功能。 ### 回答3: 多项式加法算法: 首先,我们需要定义多项式的结构体Node,其中包含多项式的系数coefficient和指数exponent两个成员。然后,我们定义一个头结点单链表头结点的指数exponent设为0且系数coefficient为0。 多项式加法算法如下: 1. 创建两个单链表,分别存储两个多项式。 2. 依次遍历第一个多项式链表中的每个节点,并将其系数加到结果链表中对应指数的节点上,如果结果链表没有对应指数的节点,则创建一个新节点并插入到结果链表中。 3. 遍历第二个多项式链表,对于每个节点,执行步骤2的操作。 4. 返回结果链表作为两个多项式的和。 多项式乘法算法多项式乘法算法如下: 1. 创建一个结果链表,初始为空。 2. 对于第一个多项式链表中的每个节点,依次遍历第二个多项式链表,并将两个节点的系数相乘,指数相加,得到结果的系数和指数。 3. 将结果系数和指数作为参数,调用一个函数来插入到结果链表中。如果结果链表中已经有了对应指数的节点,则将系数加到节点的系数上;否则,创建一个新节点并插入到结果链表中。 4. 返回结果链表作为两个多项式的乘积。 显示多项式算法显示多项式算法如下: 1. 从头结点开始遍历多项式链表。 2. 对于每个节点,判断系数是否为0,若为0则跳过;若不为0,则按照以下规则输出: a) 如果系数为正数且指数为0,直接输出系数; b) 如果系数为正数且指数为1,输出" + 系数x"; c) 如果系数为正数且指数大于1,输出" + 系数x^指数"; d) 如果系数为负数,将系数取绝对值后按照a)、b)、c)的规则输出,并在最前面加上" - "。 3. 输出完毕后,换行。 以上就是使用头结点单链表存储多项式,并实现多项式加法乘法显示多项式算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值