【数据结构】dengyuxin的project1.2

#ifndef POLYON_H_INCLUDED
#define POLYON_H_INCLUDED
//polyon.h
#include <iostream>
using namespace std;
class node
{
    public:
    int pa;
    int times;
    node *next;
    node(int p = 0,int t = 0,node* n=NULL)
    {
        pa = p;
        times = t;
        next = n;
    }
};
class polynomial
{
    private:

    void swap(node *n1,node *n2)
    {
        int n,m;
        n=n1->pa;n1->pa=n2->pa;n2->pa=n;
        m=n2->times;n2->times=n1->times;n1->times=m;
    }
    public:
    node *head;
    node *curr;
    int size;
    polynomial()
    {
        head = curr =new node();
        size =0;
    }
    polynomial(polynomial &p1,polynomial &p2)
    {
        p1.curr = p1.head;
        while(p1.curr->next!=NULL)
           p1.curr=p1.curr->next;
        p1.curr->next = p2.head->next;
        delete p2.head;
        head = p1.head;
        curr = p1.head;
        size = p1.size+p2.size;

    }
    void insert(int p,int t)
    {
        curr =new node(p,t,head->next);
        head->next = curr;
        size++;
    }
    void sort()
    {
        for(int i =0;i<size;i++){
        for(curr=head->next;curr->next!=NULL;curr=curr->next)
        {
            if(curr->times < curr->next->times)
                swap(curr,curr->next);
        }}
    }
    void merge()
    {
        node *tmp;
        for(curr =head->next;curr!=NULL;curr=curr->next)
        { //  cout<<"#1"<<endl;
            tmp=curr;
            while(tmp->next!=NULL)
            {   //cout<<"#2"<<endl;
                if(tmp->next->times==curr->times)
                {
                    curr->pa += tmp->next->pa;
                    node *t=tmp->next;
                    tmp->next=tmp->next->next;
                    delete t;
                }
                else{
                    tmp=tmp->next;}
            }
        }
    }
    void print()
    {
         sort();
        merge();
       // cout<<"merge complete"<<endl;
        sort();
       // cout<<"print"<<endl;
        curr = head->next;
        while(curr!=NULL)
        {
            if(curr->pa!=0&&curr->next!=NULL)
                cout<<curr->pa<<'x'<<'^'<<curr->times<<'+';
            if(curr->next==NULL)
                cout<<curr->pa<<'x'<<'^'<<curr->times;
            curr=curr->next;
        }
        cout<<endl;
    }
};


#endif // POLYON_H_INCLUDED

就是定义了一个用于储存多项式的函数;

//main function
//author: byshen
#include <iostream>
#include "polyon.h"
using namespace std;

int main()
{
    int a,b;
    char c;
    polynomial y1,y2;
    do
    {
        cout<<"input the coefficient and exponent of y1: ";
        cin>>a>>b;
        y1.insert(a,b);
        cout<<"continue?(n' to quit)";cin>>c;
    } while(c!='n');
    cout<<"y1 = ";
    y1.print();
    do
    {
        cout<<"input the coefficient and exponent of y2: ";
        cin>>a>>b;
        y2.insert(a,b);
        cout<<"continue?(n' to quit)";cin>>c;
    } while(c!='n');

    cout<<"y2 = ";
    y2.print();
    polynomial result(y1,y2);
    cout<<"result = ";
    result.print();
    return 0;
}

感谢自己又坚持了一天!

加油!


C++写的实现了基本的功能 #include<iostream> #include"PolyList.h" using namespace std; Polynomial::Polynomial() { coefs = NULL; exps = NULL; size = 0; cout<<"构造完成"<<endl; } Polynomial::~Polynomial() { delete []coefs; delete []exps; coefx = NULL; expx= NULL; cout<<"析构调用"<<endl; } Polynomial::Polynomial(double coef[],int exp[],int s) { coefs = new double[s]; exps = new int[s]; size = s; for(int i = 0; i<size; i++) coefs[i] = coef[i]; for(i = 0;i<size;i++) exps[i] = exp[i]; cout<<"complete!"<<endl; } Polynomial::Polynomial(const Polynomial &p) { coefs = new double[p.size]; exps = new int[p.size]; size = p.size; for(int i = 0;i < size; i++) coefs[i]= p.coefs; for(i = 0; i < size; i++) exps[i] = p.exps[i]; cout<<"copy调用"<<endl; } const Polynomial& Polynomial::operator=(const Polynomial &p)//完成测试 { if(this!=&p) { delete []coefs; delete []exps; size = p.size; coefs = new double[size]; exps = new int[size]; for(int i = 0;i < size;i++) coefs[i] = p.coefs[i]; for(int i = 0; i<size;i++) exps[i]=p.exps[i]; } return *this; }//完成测试 int Polynomial::degree() const //完成测试 { return size - 1; } double Polynomial::evaluate(double x) const//完成测试 { double sum=coefs[0]; for(int i = 1;i < size;i ++) { for(int j = 1;j <= i;j++) x*= x; sum+=coefs[i] * x; } return sum; } bool Polynomial::operator ==(const Polynomial &p) const { if (size != p.size) return false; return false; for(int i = 0; i < size; i++) if(coefs[i]!= p.coefs[i]) return false; return true; } bool Polynomial::operator !=(const Polynomial &p) const { return !(operator==(p)); } Polynomial Polynomial::operator +(const Polynomial &p) const { int maxsize = (size > p.size) ? size:p.size; int minsize = (size < p.size) ? size:p.size; Polynomial temp; temp.coefs = new double[maxsize]; temp.exps = new int [maxsize]; for(int i = 0;i < minsize;i ++) temp.coefs[i]=coefs[i] + p.coefs[i] for(;i < maxsize;i++) temp.coefs[i]=coefs[i]; for(int j = 0;j < maxsize;j++) temp.exps[j] = j; temp.size=maxsize; return temp; } Polynomial Polynomial::operator -(const Polynomial &p) const { int maxsize = (size > p.size) ? size:p.size; int minsize = (size < p.size) ? size:p.size; Polynomial temp; temp.coefs = new double[maxsize]; temp.exps = new int[maxsize]; for(int i = 0;i < minsize;i++) temp.coefs[i]=coefs[i] - p.coefs[i]; for(;i <maxsize;i++) temp.coefs[i]=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值