C:循环链接列表 - 将术语添加到多项式

时间:2014-09-17 21:27:54

标签: c linked-list polynomials

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

  1. 多项式必须按升序排列
  2. 如果某个术语具有相同的指数,则应添加这些术语,而不是创建另一个术语。
  3. 您必须使用循环链表,其中的指数将是'标题'每个学期。
  4. 每个多项式的第一项将是expo = -1,它将指向多项式的第二项(expo> = 0)。此外,多项式的最后一项将指向第一项
  5. 我已经尝试制作这段代码了,但由于某种原因我不知道,它编译没有问题,但它一直在运行(并且它没有给出分段错误或类似的东西)。

    你能告诉我,我做错了吗?我真的需要你的帮助。对不起,我知道这可能是一个菜鸟,但请耐心等待,我对此很新。

    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上运行。

1 个答案:

答案 0 :(得分:1)

初始列表包含一个Term expo = -1next指向自身。 while循环正在查找第一个Termexpo大于或等于您要添加的e;但是,此时,没有这样的Term,因此while循环将永远围绕循环列表旋转。当rook返回p时,您需要循环终止。

如果您不在循环中,只需要将新的Term添加到列表中即可。在rook->expo == e的情况下,您不需要新的Term