標(biāo)題: 貼上我寫的多項(xiàng)式相加的代碼 [打印本頁(yè)]

作者: liuyang    時(shí)間: 2012-1-14 03:52
標(biāo)題: 貼上我寫的多項(xiàng)式相加的代碼
呵呵,自己寫的與調(diào)試;1個(gè)半小時(shí)呢!

#include<stdio.h>
#include<malloc.h>
/***y=5x^9+3x^4+6x+-1****/
/***y=12x^12+-3x^4+2x+3*****/
/** 求Y的直 ***/


typedef struct list1 {
 int  wdata;   //系數(shù)
 int exp;   //指數(shù)
    struct list1* next;
}cl;

void creat_l(cl <)
{
 cl *p,*q;
 int a,b,n;
 p=<
// scanf("%d%d",&a,&b);
    for(n=4;n>0;--n)
 {
  q=(cl *)malloc(sizeof(cl));
  scanf("%d%d",&a,&b);
  q->wdata =a;
  q->exp=b;
  p->next=q;
  p=q; 
 }
 p->next=NULL;
}

void padd(cl <1,cl <2)    //相加
{
 cl *p,*q,*fp,*dp,*fq;
 int sum;
 fp =<1;
    fq=<2;
 p=lt1.next;
 q=lt2.next;
 while(p&&q)
 {
  if (p->exp==q->exp)
  {
   sum =p->wdata+q->wdata;
   if(sum){
    p->wdata=sum;
    fp=p;
   }else
   {
    fp->next=p->next;
    free(p);
   }
   p=fp->next;
   dp=q;
   q=q->next;
   free(dp);
  }else
  {
   if (p->exp>q->exp)
   {
   // fp->next=p;
    fp=p;
    p=p->next;
   }else
   {
    fp->next=q;   // 
    fp=q;        //當(dāng)前指針為q
    q=q->next;   //q下移一個(gè)
    fp->next=p;   //當(dāng)前指針下個(gè)節(jié)點(diǎn)是p
   }
  }
  
 }
 
 if(q)fp->next=q;
// free(fq); //釋放表頭
 
}

void print_l(cl <)  //打印
{
    cl *p;
 p=lt.next;
 while(p->next)
 {
  printf("%dX^%d+",p->wdata,p->exp);
  p=p->next;
 }
    printf("%dX",p->wdata);
}
int main()
{
 
 cl c1,c2;
    creat_l(c1);
 creat_l(c2);
 padd(c1,c2);
 print_l(c1);
 return 0;
}





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1