zoukankan      html  css  js  c++  java
  • 实验---实现两个指数递减多项式的和与积

    有两个指数递减的一元多项式,写一程序先求这两个多项式的和,再求它们的积。

    【提示】 用带表头结点的单链表作为多项式的存储表示;要建立两个单链表;多项式相加就是要把一个单链表中的结点插入到另一个单链表中去,要注意插入、删除操作中指针的正确修改。

    #include<iostream>
    #include<cmath>
    using namespace std;
    
    /**
    数据结构习题1
    多项式的相加和相乘
    @刘辉
    **/
    struct Node{
        int data;
        int index;
        Node* next;
    };
    Node *insertList(Node* head,Node* p);  //插入链表
    Node *createList();           //创建链表
    void printList(Node *head);  //打印链表
    Node *addList(Node *p1,Node *p2); //实现加法运算
    
    Node *createList()
    {
        int index,data;
        Node *p,*head,*q;
        head = new Node;
        p = head;
        cout<<"请输入要输入的多项式a的幂指数:";
        cin>>index;
        cout<<"请输入该指数的参数:";
        cin>>data;
        while(index!=0)
        {
            q = new Node;
            q->index = index;
            q->data = data;
            p->next = q;
            p = q;
            cout<<"请输入要输入的多项式a的幂指数:";
            cin>>index;
            cout<<"请输入该指数的参数:";
            cin>>data;
        }
        p->next = NULL;
        return head;
    }
    //多项式相加
    Node *addList(Node *p1,Node *p2)
    {
        int add;
        Node *temp,*head,*p3;
        p1 = p1->next;
        p2 = p2->next;
        head = temp = new Node;
        head->next = NULL;
        while(p1&&p2)
        {
            
            if(p1->index==p2->index)
            {
                add = p2->data + p1->data;
                if(add!=0)
                {
                    p3 = new Node;
                    p3->index = p2->index;
                    p3->data = add;
                    p3->next = NULL;
                }
                p1 = p1->next;
                p2 = p2->next;
            }
            else if(p1->index<p2->index)
            {
                p3 = new Node;
                p3->data = p2->data;
                p3->index = p2->index;
                p3->next = NULL;
                p2 = p2->next;
                
            }
            else
            {
                p3 = new Node;
                p3->data = p1->data;
                p3->index = p1->index;
                p3->next = NULL;
                p1 = p1->next;
                
             }
            if(head->next ==NULL)
            {
                head->next = p3;
                temp = p3;
            }
            else
            {
                temp->next = p3;
                temp = p3;
            }
        }
        temp->next = p1?p1:p2;
        return head;
        
    }
    
    //多项式相乘
    Node* mulList(Node *p1,Node *p2)
    {
        Node *head,*temp,*s,*r,*q;
        head = new Node;
        head->next = NULL;
        temp = new Node;
        temp->next = NULL;
        p1 = p1->next;
        p2 = p2->next;
        for(s=p1;s;s=s->next)
        {
            for(r=p2;r;r=r->next)
            {
                q = new Node;
                temp->next = q;
                q->data = s->data * r->data;
                q->index = s->index + r->index;
                q->next = NULL;
                head = addList(temp,head);
             }
        }
        return head;
    }
    
    //打印多项式
     void printList(Node *head)
     {
         Node *p = NULL;
         p = head->next;
         if(p==NULL)
         {
             cout<<"文件为空";
         }
         else
        {
            do
            {
                if(p->data>=0)
                    cout<<p->data<<"x^"<<p->index;
                else
                    cout<<p->data<<"x^"<<p->index;
                if(p->next!=NULL)
                    cout<<"+";
                p=p->next;
            }while(p != NULL);
        cout<<endl; 
        }
     }
     
    
    
     //主函数
    int main()
    {
        int i;
        Node *p1=NULL,*p2=NULL,*p3=NULL,*p4=NULL;
        cout<<"创建第一个多项式的链表:"<<"
    ";
        p1 = createList();
        cout<<"
    ";
        cout<<"创建第二个多项式的链表:"<<"
    ";
        p2 = createList();
        cout<<"第一个多项式为:";
        printList(p1);
        cout<<"
    "<<"第二个多项式为:";
        printList(p2);
        p3 = addList(p1,p2);        //实现多项式相加
        cout<<"
    "<<"多项式相加后为:";
        printList(p3);
        cout<<endl;
        p4 = mulList(p1,p2);        //实现多项式相乘
        cout<<"多项式相乘后为:";
        printList(p4);
        cin>>i;
        return 0;
    }
  • 相关阅读:
    iOS开发UI篇—CAlayer简介
    iOS开发UI篇—ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
    录屏专家
    加载Gif图片方法
    制作酸奶方法
    UITabBar小红点(适配iPad)
    那些著名或非著名的iOS面试题-后编
    iOS学习资源
    实用的Mac软件
    安装iOS企业包流程
  • 原文地址:https://www.cnblogs.com/liuhui5599/p/6015361.html
Copyright © 2011-2022 走看看