一元多项加法运算的实现-数据结构 第2页

一元多项加法运算的实现-数据结构 第2页
#include "stdio.h"
#include"malloc.h"
typedef struct LNode     //定义单链表
{
 int xishu;      //系数
 int zhishu;     //指数
 struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &L)   //定义一个空表
{
 L=(LinkList)malloc(sizeof(LNode));
 L->next=NULL;
 return;
}
void CreatPolyn(LinkList &L)   //用单链表定义一个多项式
{
 int m;
 LinkList q,p;
 InitList(L);
 q=L;
 printf("输入项数:");
 scanf("%d",&m);
 printf("按降幂输入系数和指数:\n");
 for(int i=0;i<m;i++)
 {
  p=(LinkList)malloc(sizeof(LNode));  //生成新结点
  scanf("%d%d",&p->xishu,&p->zhishu);
  p->next=NULL;
  q->next=p;
  q=p;
 }

 return;
}
void DispPolyn(LinkList L)  //显示输入的多项式
{    LinkList  p;
     p=L->next;
  printf("一元多项式为: \n" ) ;
  while(p)
  {
   if(p->xishu>0) //如果系数大于0则加上+号
    printf(" + %d X^%d" ,p->xishu,p->zhishu);
   else 
    printf("  %d X^%d" ,p->xishu,p->zhishu);
   p=p->next;
  }
  printf("\n");
  return ;
 
}
void Polyn(LinkList &pa,LinkList &pb)
{
       LNode *p,*q,*pre,*temp;
       int t;
    float sum=0;
    CreatPolyn(pa);
    DispPolyn(pa);
    CreatPolyn(pb);
    DispPolyn(pb);
       p=pa->next;    //p指向pa头结点
       q=pb->next;    //q指向qa头结点
       pre=pa;     //用来记录合成的多项式
  
     while(p!=NULL&&q!=NULL)   //当两个多项式都为完时
     {
      if(p->zhishu<q->zhishu)   //如果q大于p的指数把q项存入
      {
       pre->next=q;
     pre=pre->next;
       q=q->next;
      }
      else if(p->zhishu==q->zhishu)   //如果q等于p的指数把q项q项和存入
      {
       sum=p->xishu+q->xishu;
                   if(sum!=0)//如果和不为0
       {
        p->xishu=sum;
        pre->next=p;
        pre=pre->next;
        p=p->next;
        temp=q;
        q=q->next;
        free(temp);//释放temp
       }
       else   //如果和为0
       {
        temp=p->next;
        free(p);//释放p
        p=temp;
                       temp=q->next;
        free(q); //释放q
        q=temp;
       }
      }
      else     //如果p大于q的指数把p项存入         
      {
       pre->next=p;    
       pre=pre->next;
       p=p->next; 
      }
     }
     if(p!=NULL)  //如果p为完q完,则p接入
      pre->next=p;
     else       //如果q为完p完,则q接入
      pre->next=q;       
     printf("计算结果为");
     DispPolyn(pa);
     printf("\n");
     //if(p!=NULL)  //如果p为空q空,则p接入
      //pre->next=p;
    /* else  //如果q为空p空,则-q接入
     {
      pre->next=q;
      while(q!=NULL)
      {
    q->xishu=-q->xishu;
       q=q->next;
      }
     
     }*/
     //printf("计算结果为");
     //DispPolyn(pa);
}
   
void main()

 LNode *L1,*L2;
 Polyn(L1,L2);
}

上一页  [1] [2] 

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有