线性表——链表的应用

2.3链表的应用

2.3.1一元多项式的存储

2.3.1.1定义

typedef struct Polynode {
  int coef;//系数
  int exp;//指数
  struct Polynode *next;//指针域
}Polynode , * Polylist; 

2.3.1.2尾插法建表

Polylist polycreate( ) {
  rear=head=(Polynode *)malloc(sizeof(Polynode)); //分配头结点
 
  scanf(“%d,%d”,&c,&e); //首元结点的系数c,和指数e

  while(c!=0) { 	//默认输入系数为0时,结束循环(结束建立新的多项式结点)
    s=(Polynode*)malloc(sizeof(Polynode));//分配空间

    s->coef=c; s->exp=e;
     rear->next=s; rear=s; //尾指针指向新插入的结点s 
    scanf(“%d,%d”,&c,&e); }//继续插入下一个多项式结点

  rear->next=NULL; return(head);
}

2.3.2一元多项式求导

void  derivat_poly( Polylist pa ){
    pre=pa; //pre便于删除常数项
    p=pa->next; //p用于完成当前结点求导操作

  while(p)
    if(p->exp==0) //删除常数项
    { pre->next=p->next;
       free(p); p=pre->next; }
    else { p->coef*=p->exp; p->exp--;
       pre=p;//不能丢
       p=p->next; }
}

2.3.3一元多项式相加

//相加结果存到pa里面
void add_poly( Polylist pa, Polylist pb ){
  p=pa->next; q=pb->next; pre=pa;//有了pre方便很多操作

  while(p&&q){
    if(p->exp<q->exp){ pre->next=p; pre=p; p=p->next; }

    else if(p->exp>q->exp){ pre->next=q;pre=q;q=q->next; }

     else{   //两结点指数域相同则系数相加

           sum=p->coef+q->coef;

           if(sum!=0) 
             { p->coef=sum; pre->next=p;pre=p;p=p->next; }

           else { temp=p; p=p->next; free(temp); }//引入temp指针删除相加后系数为0的结点
          
            temp=q; q=q->next; free(temp);//释放用不到的q结点

         }

//把剩余结点链接到pre后面
  if(q!=NULL) pre->next=q; else pre->next=p;
  free(pb);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值