2012-03-09 3 views
0

多項式(係数と指数)を係数、指数、および次のノードへのポインタの構造体を持つリンクリストにインポートするプロジェクトがあります。ストレージはすべて設定されていますが、オペレータに問題があります。私は=すべてのセットを持っているが、問題を抱えている私を超えている。演算子+リンクリストADT

は、これまでのところ私はそれを実行しているようだ

Poly Poly::operator+ (const Poly& orig){ 
    bool firstTime = 0; 
    Poly temp; 
    temp.Head = new PolyTerm; 
    temp.Size = 1; 
    ptrType New = temp.Head; 
    ptrType cur = Head; 
    for(int i = 1; i <= Size; i++) { 
      ptrType org = orig.Head; 
      for(int j = 1; i <= orig.ListLength(); j++) { 
        if(org->exp == cur->exp) { 
          if(firstTime) { 
            New->Next = new PolyTerm; 
            New = New->Next; 
            New->Next = NULL; 
            temp.Size += 1; 
          } 
          New->coef = ((cur->coef) + (org->coef)); 
          New->exp = cur->exp; 
          firstTime = 1; 
          break; 
        } 
        org = org->Next; 

      } 
      cur = cur->Next; 
    } 

    return temp; 
} 

を持っている罰金、それはリターンを返すとする取得しますが、私のプログラムは、その後ハングブレークポイントを持ちます。私が間違って行ったことは確かではありませんが、私は単純だと思います。

私は十分な情報を提供していることを望みます。お気軽に何かをお尋ねください

+0

'firstTime'は最初は' false'です。あなたは 'if()'条件firstTimeを入力しません。それはあなたが欲しいものですか? – noMAD

+0

はい、私が欲しいものは、それは初めて後に起こるはずです – Brian

+0

@BrianMcNamara:たぶんそれは "notFirstTime"と呼ばれるべきでしょうか? (そして 'false'に初期化) –

答えて

0

あなたはポリタイプの定義方法がわかりません。 これは私がやろうとしていることです:多項式の値を格納するpoly型は、intのように数値を格納します。 (演算子==も実装したいかもしれません)。

#include <memory> 

template<typename COEF,typename EXP> 
struct PolyList { 
    COEF coef; 
    EXP exp; 
    std::shared_ptr<const PolyList<COEF,EXP>> next; 
    template<typename C,typename E> 
    PolyList(C coef,E exp):coef(coef),exp(exp){} 
}; 

template<typename COEF,typename EXP> 
struct poly : public std::shared_ptr<const PolyList<COEF,EXP>> { 
    template<typename X> 
    poly(X x):std::shared_ptr<const PolyList<COEF,EXP>>(x){} 
    poly(){} 
}; 

template<typename COEF,typename EXP> 
poly<COEF,EXP> operator+(poly<COEF,EXP> a,poly<COEF,EXP> b) 
{ 
    if(!a) return b; 
    if(!b) return a; 
    if(a->exp > b->exp){ 
     PolyList<COEF,EXP> *ret = new PolyList<COEF,EXP>(a->coef,a->exp); 
     ret->next = a->next + b; 
     return ret; 
    } 
    if(a->exp < b->exp) return b+a; 
    // a->exp == b->exp 
    COEF c = a->coef + b->coef; 
    if(!c) return a->next + b->next; 
    // c!=0 
    PolyList<COEF,EXP> *ret = new PolyList<COEF,EXP>(c,a->exp); 
    ret->next = a->next + b->next; 
    return ret; 
}