程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實現兩個指數遞減多項式的和與積,指數遞減多項式

實現兩個指數遞減多項式的和與積,指數遞減多項式

編輯:C++入門知識

實現兩個指數遞減多項式的和與積,指數遞減多項式


有兩個指數遞減的一元多項式,寫一程序先求這兩個多項式的和,再求它們的積。

【提示】 用帶表頭結點的單鏈表作為多項式的存儲表示;要建立兩個單鏈表;多項式相加就是要把一個單鏈表中的結點插入到另一個單鏈表中去,要注意插入、刪除操作中指針的正確修改。

 

 

#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<<"創建第一個多項式的鏈表:"<<"\n";
    p1 = createList();
    cout<<"\n";
    cout<<"創建第二個多項式的鏈表:"<<"\n";
    p2 = createList();
    cout<<"第一個多項式為:";
    printList(p1);
    cout<<"\n"<<"第二個多項式為:";
    printList(p2);
    p3 = addList(p1,p2);        //實現多項式相加
    cout<<"\n"<<"多項式相加後為:";
    printList(p3);
    cout<<endl;
    p4 = mulList(p1,p2);        //實現多項式相乘
    cout<<"多項式相乘後為:";
    printList(p4);
    cin>>i;
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved