1

私は循環リンクリストに不慣れで、まだいくつかの問題があります...多項式と2つの変数(e = xの指数、およびc =係数)が与えられたCでこの関数を作成しようとしています) この cx^e を多項式に追加します。ただし、いくつかの条件があります。

  1. 多項式は昇順でなければなりません
  2. 同じ指数を持つ項がある場合は、項を追加し、別の項を作成しないでください。
  3. 指数が各用語の「ヘッダー」になる循環リンクリストを使用する必要があります。
  4. 各多項式の最初の項は expo = -1 になり、多項式の 2 番目の項 (expo >= 0) を指します。また、多項式の最後の項は最初の項を指します。

私はすでにこのコードを作成しようとしましたが、何らかの理由で問題なくコンパイルされていますが、永遠に実行され続けています (セグメンテーション違反などは発生しません)。

皆さん、私が間違っていることを教えてください。私は本当にあなたの助けが必要です。申し訳ありませんが、初心者のことかもしれませんが、しばらくお待ちください。私はこれにかなり慣れていません。

typedef struct Term {
  int expo;
  float coef;
  struct Termo *next; 
 } Term, *Polynomial;


void AddTerm(Polynomial p, int e, float c) { 
/* Add in polynomial 'p' the term '(e,c)', leaving the terms in ascending order */
/* Assume that all c will be different than zero. */
    Polynomial rook, save, term;
    rook = p;

    while(rook -> expo < e){
        save = rook;
        rook = rook -> next;
    }

    term = malloc(sizeof(Term));


    if(rook -> expo == e){
        rook -> coef = rook -> coef + c;
    }
    else{
        term -> expo = e;
        term -> coef = c;
        term -> next = save -> next;
        save -> next = term;
    }

} /* AddTerm */

どんな助けでも大歓迎です。Linux Mint 17 Cinnammon で実行しています。

4

1 に答える 1

1

最初のリストには、単一の , が含まれておりTerm、それ自体expo = -1next指しています。ループは、追加しようとしている以上の最初のものをwhile探しています。ただし、この時点ではそのような は存在しないため、while ループは循環リストを永遠に循環します。に戻ってきたときにループを終了する必要があります。TermexpoeTermrookp

Termループから抜けたら、リストに追加する場合にのみ、新しいものを割り当てる必要があります。の場合rook->expo == e、新しいTerm.

于 2014-09-17T21:53:51.767 に答える