⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 计算器.cpp

📁 数据结构C语言实现一元多项式运算
💻 CPP
字号:
#include <iostream.h>    
#include<stdio.h>    
#include<malloc.h>    
#include<stdlib.h>    
#define  LEN  sizeof(node)     
   
//用单链表存储多项式的结点结构    
typedef struct polynode       
{    
      int coef;  //多项式的系数    
      int exp;   //指数    
      struct polynode *next;    
}node;    
//指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数    
node * create(void)     
{    
     node *h,*r,*s;    
     int c,e;    
     //建立多项式的头结点,为头结点分配存储空间    
     h=(node *)malloc(LEN);     
     r=h; //r指针始终动态指向链表的当前表尾    
     cout<<"系数: ";    
     cin>>c;    
     cout<<"指数: ";    
     cin>>e;    
     //输入系数为0时,表示多项式的输入结束    
     while(c!=0)      
    {    
          s=(node *)malloc(LEN); /*申请新结点*/   
          s->coef=c;  /*申请新结点后赋值*/   
          s->exp=e;   /*申请新结点后赋值*/   
          r->next=s; /*做尾插,插入新结点*/   
          r=s;  /*r始终指向单链表的表尾*/   
          cout<<"系数: ";    
          cin>>c;    
          cout<<"指数: ";    
          cin>>e;    
    }    
    r->next=NULL;    
    return(h);    
}    
//一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb删除    
void polyadd(node *polya, node *polyb)    
{    
       node *p,*q,*pre,*temp;    
       int sum;    
       p=polya->next;/*令p和q分别指向polya和polyb多项式链表中的第一个结点*/   
       q=polyb->next;    
       pre=polya;    /*位置指针,指向和多项式polya*/   
       while(p!=NULL&&q!=NULL) /*当两个多项式均未扫描结束时,执行以下操作*/   
      {    
            if(p->exp<q->exp)           /*若p指向的多项式指数小于q指的指数*/   
            {    
                   pre->next=p;      /*将p结点加入到和多项式中*/   
                   pre=pre->next;    
                   p=p->next;    
            }    
            else if(p->exp==q->exp)    /*若指数相等,则相应的系数相加*/   
            {    
                   sum=p->coef+q->coef;    
                   if(sum!=0)    
                   {    
                        p->coef=sum;    
                        pre->next=p;pre=pre->next;p=p->next;    
                        temp=q;q=q->next;free(temp);    
                    }    
                  else     /*如果系数和为零,则删除结点p与q,并将指针指向下一个结点*/   
                 {    
                       temp=p->next;free(p);p=temp;    
                       temp=q->next;free(q);q=temp;    
                 }    
           }    
          else                      /*若p指数大于q指数*/     
          {    
                pre->next=q;  /*p结点不动,将q结点加入到和多项式中*/   
                pre=pre->next;    
                q=q->next;    
          }    
    }    
    if(p!=NULL)  /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/   
           pre->next=p;    
    else        /*否则将B的结点加入到和多项式中*/     
           pre->next=q;                                                             
}    
   
void print(node * p) /*输出函数,打印出一元多项式*/   
{                                                                                                          
    while(p->next!=NULL)    
    {       
        p=p->next;    
        cout<<p->coef<<"*x^"<<p->exp;    
        if(p->next != NULL) cout<<"+";    
    }    
}       
   
void main()     
{    
      node * polya,* polyb;    
      cout<<"输入第一个多项式的系数和指数,以系数为0结束:"<<endl;    
      polya=create();  /*调用建立链表函数,创建多项式A*/   
      print(polya);    
      cout<<endl<<"输入第二个多项式的系数和指数,以系数为0结束:"<<endl;    
      polyb=create();    
      print(polyb);    
      cout<<endl<<"相加的结果是:";    
      polyadd(polya,polyb);    /*调用一元多项式相加函数*/   
      print(polya);            /*调用输出函数,打印结果*/   
      cout<<endl;    
}   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -