循环链表与稀疏多项式

问题描述:

以循环链表做稀疏多项式的存储结构,编写求其导函数的算法,要求利用原多项式中的结点空间存放其导函数,同时释放所有无用结点

问题分析:

导函数应该很熟悉,所以写这个算法应该较简单。

稀疏多项式采用的循环链表存储结构定义为:

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;

}

posted @ 2013-04-26 10:40  wj704  阅读(787)  评论(0编辑  收藏  举报