一元多项式求和(c++源码)

LinkList.h

#ifndef LINKLIST_H_
#define LINKLIST_H_
#include<stdio.h>
template<class T>
struct Node
{
    T data;
    struct Node<T>* next;
};
template<class T>
class LinkList
{
private:
    Node<T>* front;
public:
    LinkList();
    LinkList(T data[],int n);
    ~LinkList();
    Node<T>* GetFirst(){return front;}
};
template<class T>
LinkList<T>::LinkList()
{
    front=new Node<T>;
    front->next=NULL;
}
template<class T>
LinkList<T>::LinkList(T data[],int n)
{
    front=new Node<T>;
    front->next=NULL;
    for(int i=n-1;i>=0;i--)
    {
        Node<T>* s=new Node<T>;
        s->data=data[i];
        s->next=front->next;
        front->next=s;
    }
}
template<class T>
LinkList<T>::~LinkList()
{
    Node<T>* p=front;
    while(p)
    {
        front=p;
        p=p->next;
        delete front;
    }
}
#endif // LINKLIST_H_

Element.h

#ifndef ELEMENT_H_
#define ELEMENT_H_
#include<iostream>
#include"LinkList.h"
#include<stdio.h>
struct element
{
    double xs;
    int zs;
    element(double x=0,int z=0):xs(x),zs(z){}
};
class PloyList:public LinkList<element>
{
public:
    PloyList(element data[],int n):LinkList(data,n){}
    void Add(PloyList& B);
    void Print();
};
void PloyList::Add(PloyList& B)
{
    Node<element>* pa=GetFirst();
    Node<element>* pb=B.GetFirst();
    Node<element>* p=pa->next;
    Node<element>* q=pb->next;
    while(p&&q)
    {
        if(q->data.zs>p->data.zs)
        {
            pa=p;
            p=p->next;
        }
        else if(q->data.zs<p->data.zs)
        {
            pa->next=q;
            pa=q;
            q=q->next;
            pa->next=p;
        }
        else
        {
            p->data.xs+=q->data.xs;
            if(p->data.xs==0)
            {
                pa->next=p->next;
                delete p;
                p=pa->next;
            }
            else
            {
                pa=p;
                p=p->next;
            }
            Node<element>* temp=q;
            q=q->next;
            delete temp;
        }
    }
    if(q)pa->next=q;
    B.GetFirst()->next=NULL;
}
void PloyList::Print()
{
    Node<element>* p=GetFirst()->next;
    while(p)
    {
        std::cout<<"("<<p->data.xs<<", "<<p->data.zs<<") ";
        p=p->next;
    }
    std::cout<<std::endl;
}
#endif // ELEMENT_H_

Use.cpp

#include<iostream>
#include"Element.h"
int main()
{
    element ea[]={element(1,0),element(2.3,2),element(3,4)};
    element eb[]={element(1,1),element(-2.3,2),element(3,4),element(5,10)};
    PloyList a(ea,3),b(eb,4);
    a.Add(b);
    a.Print();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m晴朗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值