数据结构-一元多项式的创建和相加

//一元多项式的创建和相加
#include <bits/stdc++.h>
using namespace std;
#define ok 1
#define error 0

typedef struct dnode {
    
    
	int xishu;//系数
	int zhishu;//指数
	struct dnode *next;
} dnode, *dlist;

//多项式的创建
void chuangjian(dlist &p, int m) 
{
    
    
	dnode *q, *pre, *s;
	int i;
	p = new dnode;
	p->next = NULL;//先建立新的结点
	for (int i = 1; i <= m; i++)//输入n个非0项
	{
    
    
		s = new dnode;//生成新的节点
		cin >> s->xishu >> s->zhishu;//输入元素值
		pre = p;//pre用于保存q的前驱,初值为头节点
		q = p->next;
		while (q && q->zhishu < s->zhishu)//找到第一个大于输入项指数的项q
		{
    
    
			pre = q;
			q = q->next;
		}
		s->next = q;//将输入项s插入到q和前驱节点pre之间
		pre->next = s;
	}
}

void add(dlist &pa, dlist &pb) 
{
    
    
	dnode *r, *p1, *p2, *p3;
	float sum;
	p1 = pa->next;
	p2 = pb->next;
	p3 = pa;
	while (p1 && p2) 
	{
    
    
		if (p1->zhishu == p2->zhishu) 
		{
    
    
			sum = p1->xishu + p2->xishu;
			if (sum != 0) 
			{
    
    
				p1->xishu = sum;
				p3->next = p1;
				p3 = p1;
				p1 = p1->next;
				r = p2;
				p2 = p2->next;
				delete r;
			} 
			else 
			{
    
    
				r = p1;
				p1 = p1->next;
				delete r;
				r = p2;
				p2 = p2->next;
				delete r;
			}
		} else if (p1->zhishu < p2->zhishu) 
		{
    
    
			p3->next = p1;
			p3 = p1;
			p1 = p1->next;
		} 
		else 
		{
    
    
			p3->next = p2;
			p3 = p2;
			p2 = p2->next;
		}
	}
	p3->next = p1 ? p1 : p2;
	delete pb;
}

int main () 
{
    
    
	dlist pa, pb;
	dnode *p;
	int temp;
	int i;
	cout << "请输入多项式pa的系数:";
	cin >> temp;
	cout << "请输入多项式pa的系数和指数" << endl;
	chuangjian(pa, temp);
	cout << "请输入多项式pb的项数:";
	cin >> temp;
	cout << "请输入多项式pb的系数和指数" << endl;
	chuangjian(pb, temp);
	add(pa, pb);
	cout << "多项式pa加pb是:" << endl;
	p = pa->next;
	i = 0;
	while (p) 
	{
    
    
		if (i)
		cout << "+";
		cout << "(" << p->xishu << ")*x^" << p->zhishu;
		p = p->next;
		i = 1;
	}
	cout << endl;
	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_52045928/article/details/121687756
今日推荐