zoukankan      html  css  js  c++  java
  • 实现多项式的加法运算

    实现两个多项式的加法     ---------------------------------优先队列版本

    #include<iostream>
    #include<queue>
    #include<string>
    using namespace std;
    class Multiploy{
    double x; //系数
    int y; //指数
    public:
    Multiploy(double x,int y)
    {
    this->x =x;
    this->y=y;
    }
    Multiploy()
    {

    }
    double GetX(){return x;}
    int GetY() const{return y;}
    void setX(double x){this->x=x;}
    void setY(int y){this->y=y;}
    bool operator<(const Multiploy& M)const
    {
    if(M.GetY()<y) return true;
    return false;
    }
    };
    void main()
    {
    Multiploy m0[]={Multiploy(3,1),Multiploy(9,8),Multiploy(5,17),Multiploy(7,0)};
    Multiploy m1[]={Multiploy(8,1),Multiploy(22,7),Multiploy(-9,8)};
    priority_queue<Multiploy>pr0(m0,m0+4);
    priority_queue<Multiploy>pr1(m1,m1+3);
    priority_queue<Multiploy>pr;
    //对上述两个多项式进行操作
    Multiploy mu1,mu2;
    while((!pr0.empty())&&(!pr1.empty()))
    {
    mu1=pr0.top();
    mu2=pr1.top();
    if(mu1.GetY()>mu2.GetY())
    {
    //mu2入队,
    pr.push(mu2);
    pr1.pop();
    }
    else if(mu1.GetY()<mu2.GetY())
    {
    pr.push(mu1);
    pr0.pop();
    }
    else
    {
    double sumX=mu1.GetX()+mu2.GetX();
    int sumY=mu1.GetY()+mu2.GetY();
    mu1.setX(sumX);
    mu1.setY(sumY);
    if(mu1.GetX()!=0)
    pr.push(mu1); //如果结果系数不为零,就将该节点压入队列中
    pr0.pop();
    pr1.pop();
    }


    }
    while(!pr0.empty())
    {
    mu1=pr0.top();
    pr.push(mu1);
    pr0.pop();
    }
    while(!pr1.empty())
    {
    mu2=pr1.top();
    pr.push(mu2);
    pr1.pop();
    }

    while(!pr.empty())
    {
    Multiploy& m=pr.top();
    cout<<m.GetX()<<"X^"<<m.GetY()<<endl;
    pr.pop();
    }
    }

    -------------------------------------------------数据结构    链表实现版

    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    typedef struct Node{
    double x; //系数
    int y; //指数
    struct Node *next;
    }Node;
    typedef struct{
    Node *head;
    Node *tail;
    }Link;

    /**************************************
    初始化链表
    ***************************************/
    void InitLink(Link &L)
    {
    L.tail=L.head=(Node *)malloc(sizeof(Node));
    if(!L.head) exit(0);
    L.head->next=NULL;
    }

    /**************************************
    创建多项式的函数
    ***************************************/
    void CreatLink(Link &L,int n)
    {
    int y;
    double x;
    Node *p;
    InitLink(L);
    for(int i=0;i<n;i++)
    {
    cout<<"请输入多项式的系数和指数:"<<endl;
    cin>>x>>y;
    p=(Node *)malloc(sizeof(Node));
    p->x=x;
    p->y=y;
    //if() //按指数的顺序添加节点
    p->next=NULL;
    //将节点p插入链表的尾节点处
    if(L.head->next==NULL) L.head->next=p; //如果链表为空,则变动头节点
    else L.tail->next=p;
    L.tail=p; //节点插入成功
    }
    }
    /**************************************
    判断多项式是否为空
    ***************************************/
    bool Empty(Link& L)
    {
    if(L.head==L.tail) return true;
    return false;
    }

    /**************************************
    计算多项式的和
    ***************************************/
    void AddPoly(Link& L1,Link& L2,Link& L3)
    {
    Node *pa,*pb,*pc;
    pa=L1.head->next;
    pb=L2.head->next;
    pc=L3.head=L1.head;
    while((pa!=NULL)&&(pb!=NULL))
    {
    if(pa->y==pb->y)
    {
    pa->x=pa->x+pb->x;
    if(pa->x!=0)
    {
    pc->next=pa;
    pc=pc->next; //节点后移
    }
    pa=pa->next;
    pb=pb->next;
    }
    else if(pa->y<pb->y)
    {
    pc->next=pa;
    pc=pc->next;
    pa=pa->next;
    }
    else
    {
    pc->next=pb;
    pc=pc->next;
    pb=pb->next;
    }
    }
    if((pa==NULL)&&(pb==NULL)) //如果两链表同时计算完,则要将pc的next置空
    {
    L3.tail=pc;
    pc->next=NULL;
    }
    if(pa!=NULL) pc->next=pa;
    if(pb!=NULL) pc->next=pb;
    }
    /**************************************
    输出多项式
    ***************************************/
    void print(Link L)
    {
    Node *p;
    p=L.head->next;
    while(p)
    {
    cout<<p->x<<"X^"<<p->y<<" ";
    p=p->next;
    }
    cout<<endl;
    }
    void main()
    {
    Link L1,L2,L3;
    int n;
    cout<<"请输入多项式L1的项数"<<endl;
    cin>>n;
    CreatLink(L1,n);
    //print(L1);
    cout<<"请输入多项式L2的项数"<<endl;
    cin>>n;
    CreatLink(L2,n);
    AddPoly(L1,L2,L3);
    print(L3);
    }

  • 相关阅读:
    2014找工作----扎实的基础和开阔的视野是企业最看重的因素
    2014找工作总结-机会往往留给有准备的人
    【STL源码剖析读书笔记】【第1章】STL概论与版本简介
    【c++ primer读书笔记】【第13章】拷贝控制
    【c++ primer读书笔记】【第12章】动态内存
    【c++ primer读书笔记】【第11章】关联容器
    【c++ primer读书笔记】【第10章】泛型算法
    【c++ primer读书笔记】【第9章】顺序容器
    WebSocket 是什么原理?为什么可以实现持久连接
    IDEA将项目导出war包方法(详细)
  • 原文地址:https://www.cnblogs.com/zdblog/p/3656995.html
Copyright © 2011-2022 走看看