我是循环链表的新手,我仍然遇到一些问题...我试图在C中创建这个函数,其中给出一个多项式和两个变量(e = x的指数) ;并且c =系数)它将此cx ^ e添加到多项式。但它有几个条件:
我已经尝试制作这段代码了,但由于某种原因我不知道,它编译没有问题,但它一直在运行(并且它没有给出分段错误或类似的东西)。
你能告诉我,我做错了吗?我真的需要你的帮助。对不起,我知道这可能是一个菜鸟,但请耐心等待,我对此很新。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上运行。
答案 0 :(得分:1)
初始列表包含一个Term
expo = -1
,next
指向自身。 while
循环正在查找第一个Term
,expo
大于或等于您要添加的e
;但是,此时,没有这样的Term
,因此while循环将永远围绕循环列表旋转。当rook
返回p
时,您需要循环终止。
如果您不在循环中,只需要将新的Term
添加到列表中即可。在rook->expo == e
的情况下,您不需要新的Term
。