一元多项式相加 C++数据结构

本文介绍了一种使用链表来存储多项式并实现两个多项式相加的方法。通过定义链表节点结构,创建链表类,并设置友元函数进行多项式加法运算,最后打印结果。该方法适用于计算机科学领域的数据结构学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用链表进行数据的存储,包括指数和系数到两者都为0时结束;
将add()函数设置为友元函数方便调用;

#include<iostream>
using namespace std;
struct node
{
	int coef;
	int exp;
	node* next;
};
class linklist
{
public:
	linklist();
	friend void add(linklist &a,linklist &b);
	void print();
private:
	node* first;
};
linklist::linklist()
{
	node* p = NULL, * s = NULL;
	first = new node;
	p = first;
	int coef, exp;
	while (1)
	{
		cout << "请输入系数和指数:";
		cin >> coef >> exp;
		if (coef == 0 && exp == 0)
			break;
		s = new node;
		s->coef = coef;
		s->exp = exp;
		p->next = s;
		p = s;
	}
	p->next = NULL;
}
void linklist::print()
{
	node* p = first->next;
	if (p != NULL)
	{
		if (p->exp != 0)
			cout << p->coef << "x^" << p->exp;
		else
			cout << p->coef;
		p = p->next;
	}
	
	while (p != NULL)
	{
		if (p->coef > 0)
			cout << " + " << p->coef << "x^" << p->exp;	
		else 
			cout << p->coef << "x^" << p->exp;
		p = p->next;
	}
	cout << endl;
}
void add(linklist& a, linklist& b)
{
	node* pre, * p, * qre, * q, * v;
	pre = a.first; p = pre->next;
	qre = b.first; q = qre->next;
	while (p != NULL && q != NULL)
	{
		if (p->exp < q->exp)
		{
			pre = p;
			p = p->next;
		}
		else if (p->exp > q->exp)
		{
			v = q->next;
			pre->next = q;
			q->next = p;
			q = v;
		}
		else
		{
			p->coef = p->coef + q->coef;
			if (p->coef == 0)
			{
				pre->next = p->next;
				delete p;
				p = pre->next;
			}
			else {
				pre = p;
				p = p->next;
			}
			qre->next = q->next;
			delete q;
			q = qre->next;
		}
	}
	if (q != NULL)pre->next = q;
	delete b.first;
}
int main()
{
	linklist a, b;
	add(a, b);
	a.print();
	return 0;
}

运行结果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值