一元多项式相加程序(C语言)

作者在 2006-10-18 06:41:00 发布以下内容

/************************
一元多项式的相加(C程序)
Firedy
2007-1-6(修改)
*************************/

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define  LEN  sizeof(node)

typedef struct polynode   /*用单链表存储多项式的结点结构*/
{
      int coef;  /*多项式的系数*/
      int exp;   /*指数*/
      struct polynode *next; /*next是struct polynode类型中的一个成员,它又指向
                         struct polynode类型的数据,以此建立链表*/
}node;/*若定为"node,*list;",意即node*与list同为结构指针类型*/

node * create(void)  /*指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数*/
{
     node *h,*r,*s;
     int c,e;
     h=(node *)malloc(LEN);  /*建立多项式的头结点,为头结点分配存储空间*/
     r=h; /*r指针始终动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/
     printf("coef:");
     scanf("%d",&c); /*输入系数*/
     printf("exp: ");
     scanf("%d",&e); /*输入指针*/
     while(c!=0)  /*输入系数为0时,表示多项式的输入结束*/
    {
          s=(node *)malloc(LEN); /*申请新结点*/
          s->coef=c;  /*申请新结点后赋值*/
          s->exp=e;   /*申请新结点后赋值*/
          r->next=s; /*做尾插,插入新结点*/
          r=s;  /*r始终指向单链表的表尾*/
          printf("coef:");
          scanf("%d",&c);
          printf("exp: ");
          scanf("%d",&e);
    }
    r->next=NULL; /*将表的最后一个结点的next置NULL,以示表结束*/
    return(h);
}

void polyadd(node *polya, node *polyb)/*一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb删除*/
{
       node *p,*q,*pre,*temp;
       int sum;
       p=polya->next;/*令p和q分别指向polya和polyb多项式链表中的第一个结点*/
       q=polyb->next;
       pre=polya;    /*位置指针,指向和多项式polya*/
       while(p!=NULL&&q!=NULL) /*当两个多项式均未扫描结束时,执行以下操作*/
      {
            if(p->exp<q->exp)           /*若p指向的多项式指数小于q指的指数*/
            {
                   pre->next=p;      /*将p结点加入到和多项式中*/
                   pre=pre->next;
                   p=p->next;
            }
            else if(p->exp==q->exp)    /*若指数相等,则相应的系数相加*/
&nb

C | 阅读 14451 次
文章评论,共1条
allowclear
2008-10-04 14:55
1
bu cuo
游客请输入验证码
浏览96920次