博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现多项式相乘的程序
阅读量:4206 次
发布时间:2019-05-26

本文共 3136 字,大约阅读时间需要 10 分钟。

exp是指数,info是系数,输入0 0一个多项式结束。

#include

#include
#include
template
class Listob
{
    public:
        Listob()
        {
          info=0;
          next=NULL;
          prior=NULL;
        }
        Listob(TData c,TData d)
        {
           info=c;
           exp=d;
           next=NULL;
           prior=NULL;
        }
        friend void operator>>(istream &stream,Listob &o);
        TData info,exp;
        Listob *next;
        Listob *prior;
};
template
void operator>>(istream &stream,Listob &o)
{
    cout<<"Enter information:";
    stream >>o.exp>>o.info;
}
template
class List :public  Listob
{
    public:
        List()
        {start=end=NULL;}
        void store(Listob );
        void remove(Listob *ob);
        void frwdlist();
        Listob *find(TData c);
        Listob *getstart()
        { return start;}
        Listob *getend()
        { return end;}
        void setstart(Listob *p)
        { start=p;}
        void setend(Listob *p)
        {end=p;}
        static void add(List &,List );
        static void sort(List &);
        static void copy(List &,List );
    private:
        Listob *start,*end;
};
template
void List ::store(Listob f)
{
    Listob *p;
    p=new Listob ;
    if(!p)
    {
        cout<<"Allocation error./n";
        exit(1);
    }
    p->info=f.info;
    p->exp=f.exp;
    if(start==NULL)
        end=start=p;
    else
    {
        p->prior=end;
        end->next=p;
        end=p;
    }
}
template
void List ::remove(Listob *ob)
{
    if(ob->prior)
    {
        ob->prior->next=ob->next;
        if(ob->next)
        ob->next->prior=ob->prior;
        else
        end=ob->prior;
    }
    else
    {
        if(ob->next)
        {
          ob->next->prior=NULL;
          start=ob->next;
        }
        else
          start=end=NULL;
    }
}
template
void List ::frwdlist()
{
    if(start==NULL)
    { cout<<"empty list/n";}
    Listob *temp;
    temp=start;
    while(temp)
    {
        cout< exp<<","< info<<" ";
        temp=temp->next;
    }
    cout<}
template
void List ::add(List &list1,List list2)
{
    Listob *p ,*q,*temp,*u;
    p=list1.getstart();q=list2.getstart();
    if(!p) {List ::copy(list1,list2);  return;}
    int flag;
    while(p&&q)
    {
        if(p->exp exp)
           flag=1;
        if(p->exp==q->exp)
            flag=2;
        if(p->exp>q->exp)
            flag=3;
        switch(flag)
        {
         case 1:
             {
                 temp=p;
                 p=p->next;
             } break ;
         case 2:
            {
                p->info+=q->info;
                if(!p->info)
                {
                list1.remove(p);
                }
                else
                temp=p;
                p=p->next;
                q=q->next;
            } break;
        case 3:
            {
               if(p->prior)
               {
               u=q->next;
               p->prior->next=q;
               p->prior->next->prior=p->prior;
               p->prior->next->next=p;
               p->prior=q;
               }
              else
              {
              u=q->next;
              list1.setstart(q);
              list1.getstart()->next=p;
              list1.getstart()->prior=NULL;
              p->prior=list1.getstart();
              }
              q=u;
            } break;
       }
    }
      if(q)
      {temp->next=q;q->prior=temp;}
}
template
void List ::copy( List &list1,List list2)
{
  Listob *p;
  list1.setstart(NULL);
  p=list2.getstart();
  while(p)
  {
     list1.store(*p);
     p=p->next;
   }
}
template
void List :: sort(List &list)
{
    TData temp;
    Listob *p,*q;
    p=list.getstart();
    while(p)
    {
       q=p;
       while(q->next)
       {
         if(q->next->exp exp)
         {
           temp=q->next->exp;
           q->next->exp=p->exp;
           p->exp=temp;
           temp=q->next->info;
           q->next->info=p->info;
           p->info=temp;
         }
         q=q->next;
       }
       p=p->next;
    }
}
void  main()
{
    List list1,list2,list2save,listanswer;
    Listob f ,*p,*q;
    cin>>f;
    while(f.info!=0)
    {
        list1.store(f);
        cin>>f;
    }
    List ::sort(list1);
    list1.frwdlist();
    cin>>f;
    while(f.info!=0)
    {
        list2.store(f);
        cin>>f;
    }
    List ::sort(list2);
    List ::copy(list2save,list2);
    list2.frwdlist();
    p=list1.getstart();
    q=list2.getstart();
    if(p&&q)
    {
        while(p)
        {
            while(q)
            {
                q->exp+=p->exp;
                q->info*=p->info;
                q=q->next;
            }
            List ::add(listanswer,list2);
            List ::copy(list2,list2save);
            q=list2.getstart();
            p=p->next;
        }
        listanswer.frwdlist();
    }
    else
    cout<<"empty list/n";
 

转载地址:http://ccmli.baihongyu.com/

你可能感兴趣的文章
2016科目三满分通过,经验分享!
查看>>
汽车档位和速度关系
查看>>
c#读书笔记,与大家分享
查看>>
自动挡车怎么开
查看>>
K2 工作流 - 基于WF新一代工作流平台
查看>>
C#利用smtp服务器发送邮件简介
查看>>
用C#发送邮件的几种方法
查看>>
发邮件
查看>>
Workflow instance 保存机制
查看>>
Windows Workflow学习文档
查看>>
简单状态机Workflow基于Web应用
查看>>
wwf票证实例教程
查看>>
跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动(发邮件)
查看>>
什么是工作流引擎(Workflow Engine
查看>>
SQL数据库连接语句
查看>>
Microsoft Windows Workflow Foundation 入门:开发人员演练
查看>>
《WF编程》系列之43 - 承载工作流:持久性服务 Persistence Services
查看>>
DataGridView选中行的值
查看>>
《WF编程》系列之34 - 基本活动:状态活动
查看>>
Asp.Net文件上传之简单文件上传(上)
查看>>