C:循环链表 - 向多项式添加项

标签 c linked-list polynomials

我是循环链表的新手,我仍然有一些问题...我正在尝试用 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 上运行。

最佳答案

初始列表包含一个 Termexpo = -1next 指向它自己。 while 循环正在寻找第一个 Termexpo 大于或等于您正在尝试的 e加上;然而,在这一点上,没有这样的 Term,所以 while 循环将永远围绕循环列表旋转。当 rook 回到 p 时,您需要终止循环。

一旦你脱离了循环,如果你打算将它添加到列表中,你只需要分配一个新的Term。在 rook->expo == e 的情况下,您不需要新的 Term

关于C:循环链表 - 向多项式添加项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25900631/

相关文章:

java - 使用小数据类型是否会减少内存使用(来自内存分配而不是效率)?

c - fgets() 函数是否追加超过最大长度的\n\0 个字符?

c++ - 测试LinkedLists时VS2010编译错误

Java::LinkedList 的插入速度真的比 ArrayList 快吗?

java - 如何打印链表中的元素

c++ - 闭式多项式求根算法

python - 多项式的系数列表

c - 使用 dup 后恢复标准输出

c++ - NTRUEncrypt:无法使用开源标准算法中描述的正确找到两个多项式的 GCD,无法定义是否存在 poly 的倒数

c - 使用hiredis一次调用发送多条记录