1

我是循环链表的新手,但我仍然有一些问题......我正在尝试在 C 中创建这个函数,其中给定一个多项式和两个变量(它们是 e = x 的指数;和 c = 系数) 它会将这个 cx^e 添加到多项式中。但它有几个条件:

  1. 多项式必须按升序排列
  2. 如果存在具有相同指数的项,则应添加项而不是创建另一个项。
  3. 您必须使用循环链表,其中它的指数将是每个术语的“标题”。
  4. 每个多项式的第一项将是 expo = -1,它将指向多项式的第二项 (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循环正在寻找Term与您尝试添加的expo大于或等于的第一个;e然而,此时没有这样Term的,所以 while 循环将永远围绕循环列表旋转。当rook返回到p.

Term退出循环后,如果您打算将其添加到列表中,则只需分配一个新的。在这种情况下rook->expo == e,您不需要新的Term.

于 2014-09-17T21:53:51.767 回答