试以循环链表作稀疏多项式的存储结构,编写求其导函数的算法,要求利用原多项式中的结点空间存放其导函数(多项式),同时释放所有无用(被删)结点。
链式多项式的类型定义:
链式多项式的类型定义:
typedef struct PolyNode {
int coef;
int exp;
struct PolyNode *next;
} PolyNode, *PolyLink; // 多项式元素(项)结点类型
typedef PolyLink LinkedPoly; // 链式多项式
实现函数如下:
void Difference(LinkedPoly &pa)
/* 稀疏多项式 pa 以循环链表作存储结构, */
/* 将此链表修改成它的导函数,并释放无用结点 */
{
LinkedPoly p,s;
p = pa;
s = p -> next;
while(p -> next != pa){
if(s -> exp == 0){ //指数为0时作特殊处理
p -> next = s -> next;
free(s);
s = p -> next; //记录下一节点
}
else{ //求导过程
s -> coef = s -> exp * s -> coef;
s -> exp--;
s = s -> next; //s节点往后移
p = p-> next; //p节点往后移
}
}
}