循环链表与稀疏多项式
问题描述:
以循环链表做稀疏多项式的存储结构,编写求其导函数的算法,要求利用原多项式中的结点空间存放其导函数,同时释放所有无用结点
问题分析:
导函数应该很熟悉,所以写这个算法应该较简单。
稀疏多项式采用的循环链表存储结构定义为:
Typedef struct PolyNode{
PolyTerm data;
Struct PolyNode *next; }PolyNode,*PolyLink;
Typedef PolyLink LinkedPoly;
Typedef struct {
Int coef;
Int exp;
}PolyTerm;
Status PolyDifferential(LinkedPoly &L)
{
LinkedPoly p,q,pt;
Q=L;
P=L->next;
While(p!=L);
{
//如果指数为0,则该项将删除
If(p->data.exp==0)
{
Pt=p;
P=p->next;
Q=p;
Free(pt);
}
Else
{
P->data.coef=(p->data.coef)*(p->data.exp);
P->data.exp--;
Q=p;
P=p->next;
}
}
Return ok;
}
问题描述:将一个用循环链表表示的稀疏多项式分成两个仅含奇次项或偶次项,用原链表的结点空间
问题分析:
想到前面做的那个题没,差不多,解决方案,也是找到头结点后,然后判断,当是偶次项时,放在头结点的左面,对不?
Status ListDivideInto2CL(LinkedPoly &L, LinkedPoly &L1)
{
LinkedPoly p,p1,q,pt;
Q=L;
P=L->next;
P1=L1;
While(p!=L)
{
If(p->data.exp%2==0)
{
Pt=p;//pt也可不需要的
P=p->next;
Q->next=p;//这相当与把此结点抽离出来了
//然后将此结点给L1
Pt->next=p1->next;
P1->next=pt;
P1=p1->next;
}
Else{
Q=p;
P=p->next;
}
}//while
Return OK;
}