2014-03-27 32 views
1

下面是我的源代码,它将生成2个由用户输入给出的多项式。现在,我坚持如何添加多项式并显示结果。我有想法如何评估我们检查列表中的指数。如果相同,系数将相加。如果不是,当前节点将进入下一个节点并与另一个节点进行比较。是吗?其实我对链表很困惑。使用链表C++添加2个多项式表达式

#include<iostream> 
using namespace std; 
class Node{ 
     public : 
      int coef; 
      int exp; 
      Node *next; 
     private: 
     }; 

class List{ 
     public: 
      List(){ 
        head = NULL; 
      } 
      void insert(int x, int y){ //inserting node 
        Node *newNode = new Node; 
        newNode->coef = x; 
        newNode->exp = y; 
        newNode->next = NULL; 

        if(head==NULL){ 
           head = newNode; 
        } 
        else{ 
         Node *currNode = head; 
         while(currNode->next!=0){ 
          currNode = currNode->next; 
         } 
         currNode->next = newNode; 
        } 
      } 
      void display(){ //display the expression 
        Node *currNode = head; 
        cout<<"\n\n\t"; 
        while(currNode->next!=0){ 
         //cout<<"Coef: "<<currNode->coef<<"\t"<<"Expo: "<<currNode->exp<<endl; 
         cout<<currNode->coef<<"X^"<<currNode->exp<< "+"; 
         currNode = currNode->next; 
        } 
        cout<<currNode->coef<<"X^"<<currNode->exp<<endl; 
        //cout<<"Coef: "<<currNode->coef<<"\t"<<"Expo: "<<currNode->exp<<endl; 
      } 
     private: 
       Node *head;    
     }; 

int main(){ 

    List seq1,seq2; 

    int x,y,a,b; 
    cout<<"Enter your expression 1: "<<endl; 

    while(cin>>x>>y,x!=0&&y!=-1){ 
      seq1.insert(x,y); 
    } 
    seq1.display(); 
    cout<<endl; 
    cout<<"Enter your expression 2: "<<endl; 

    while(cin>>a>>b,a!=0&&b!=-1){ 
      seq2.insert(a,b); 
    } 
    seq2.display(); 

    return 0; 
} 
+0

有没有理由你使用自己的列表而不是'std :: list'?如果你“实际上很困惑”,那么你可能首先需要使用'std :: list',这样你就知道你的多项式级逻辑是正确的,而不是同时进行调试。 –

+0

您是否需要使用自己的链接列表?如果没有,你可以使用'std :: map'更优雅地解决你的问题。地图中的关键字可以是指数,地图中的值可以是系数。 –

+0

可以说,我使用我自己的列表,因为我更清楚这种方式和列表的算法。我很困惑,因为有很多写链接列表源代码的方法。而且还不能区分哪一个更好。 – user3120873

回答

1

正如你猜测的,你需要遍历每个列表并比较指数。如果指数匹配,则添加系数。你想要更仔细地看待你使用链表的方式。目前,无论指数的值如何,您都要在最后添加多项式的每个新条目。另外,如果用户输入相同的指数两次,则添加第二个节点。

如果您将表达式保留在按指数排序的链表中,那么将多项式添加到一起并且更加高效得多。