线性表之一元多项式-算法2.18

第1关:一元多项式的计算

本关任务:编写链表实现一元多项式的计算。

课本中介绍十分详细,如有不懂可看书

#include<iostream>
#include<string>
#include<fstream>
using namespace std;
#define ERROR 0

typedef struct PNode {
	float coef; //系数
	int expn; //指数
	struct PNode *next;
} PNode, *Polynomial;


void CreatPolyn(Polynomial &P, int m) //算法2.18 多项式的创建
{
	//输入m项的系数和指数,建立表示一个多项式的有序链表P
    /********************************************Begin**********************************/
    P = new PNode;
    P -> next = NULL;

    Polynomial k = P;

    while(m -- )
    {
        Polynomial t = new PNode;
        t -> next = NULL;
        cin >> t -> coef >> t -> expn;

        k -> next = t;
        k = t;
    }
    /********************************************End***********************************/
	
} //CreatPolyn

void AddPolyn(Polynomial &Pa, Polynomial &Pb) //算法2.19 多项式的相加
{
	//多项式加法:Pa=Pa+Pb,利用两个多项式的结点构成“和多项式”
      /********************************************Begin**********************************/
    Polynomial k = Pa,p = Pa -> next,q = Pb -> next;

    while(p && q)
    {
        int a = p -> expn,b = q -> expn;

        if(a < b)
        {
            k -> next = p;
            k = p;
            p = p -> next;
        }
        else if(a == b)
        {
            p -> coef += q -> coef;
            if(p -> coef > 0) 
            {
                k -> next = p;
                k = p;
            }
                
            p = p -> next,q = q -> next;
        }
        else
        {
            k -> next = q;
            k = q;
            q = q -> next;
        }
    }

    k -> next = p ? p : q;

    /********************************************End***********************************/
	
} //AddPolyn


int main() 
{
	Polynomial Pa, Pb;
	Polynomial p;
	int i, n, m;
    
    scanf("%d %d", &n, &m);
	//创建多项式Pa
	CreatPolyn(Pa, n); //调用函数,输入Pa每一项的系数和指数

	//创建多项式Pb
	CreatPolyn(Pb, m); //调用函数,输入Pa每一项的系数和指数

	AddPolyn(Pa, Pb);

	p = Pa->next;
	i = 0;
	while (p) //输出相加后的结果,每一项以x^n表示
	{
		if (i)
			cout << " + ";
		cout << "(" << p->coef << ") * x^" << p->expn;
		p = p->next;
		i = 1;
	}
	cout << endl;
	return 0;
} 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值