利用栈实现两个一元多项式相加

来源:互联网 发布:笔记本cpu降温软件 编辑:程序博客网 时间:2024/05/17 22:29
[cpp] view plain copy
print?
  1. 程序运行结果如下:  
[cpp] view plain copy
print?
  1. <span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"># include<stdio.h></span>  
[cpp] view plain copy
print?
  1. # include<stdlib.h>  
  2. struct node  
  3. {  
  4.     int exp;  
  5.     float coef;  
  6.     struct node *next; /*指向结构体指针*/   
  7. };  
  8. typedef struct node ListNode;  
  9. ListNode *createpoly() //创建多项式链表   
  10. {  
  11.   ListNode *h=NULL,*p,*q=NULL;  
  12.   int e;  
  13.   float c;  
  14.   printf("请输入系数和指数:");  
  15.   scanf("%f,%d",&c,&e);  
  16.   while(e!=0||c!=0)  
  17.   {  
  18.     p=(ListNode*)malloc(sizeof(ListNode));  
  19.     p->coef=c;  
  20.     p->exp=e;  
  21.     p->next=NULL;  
  22.     if(h==NULL)  
  23.     h=p;  
  24.     else  
  25.     q->next=p;  
  26.     q=p;  
  27.     printf("请输入系数和指数:");  
  28.     scanf("%f,%d",&c,&e);  
  29.       }   
  30.       return h;  
  31. }  
  32. void disppoly(ListNode *h)  
  33. /*输出多项式*/  
  34. {  
  35.     ListNode *p;  
  36.     p=h;  
  37.     while(p!=NULL)  
  38.     {  
  39.         if(p->exp==0)  
  40.         printf("%.2f",p->coef);  
  41.         else  
  42.         printf("%fx^%d",p->coef,p->exp);  
  43.         p=p->next;  
  44.         if(p!=NULL)  
  45.         printf("+");  
  46.     }  
  47.     printf("\n");  
  48.  }   
  49.  ListNode *addpoly(ListNode *h1,ListNode *h2)  
  50.  /*将两个多项式相加*/  
  51.  {  
  52.     ListNode *p,*r=NULL,*s1,*s2,*s=NULL;  
  53.     float c;  
  54.     int e;  
  55.     s1=h1;  
  56.     s2=h2;  
  57.     while(s1!=NULL&&s2!=NULL)  
  58.     {  
  59.         if(s1->exp==s2->exp)  
  60.         {  
  61.             c=s1->coef+s2->coef;  
  62.             e=s1->exp;  
  63.             s1=s1->next;  
  64.             s2=s2->next;  
  65.          }  
  66.          else if(s1->exp>s2->exp)  
  67.          {  
  68.             c=s1->coef;  
  69.             e=s1->exp;  
  70.             s1=s1->next;  
  71.          }  
  72.          else  
  73.          {c=s2->coef;  
  74.          e=s2->exp;  
  75.          s2=s2->next;  
  76.          }  
  77.          if(c!=0)  
  78.          {  
  79.             p=(ListNode*)malloc(sizeof(ListNode));  
  80.             p->coef=c;  
  81.             p->exp=e;p->next=NULL;  
  82.             if(s==NULL)  
  83.             s=p;  
  84.             else  
  85.             r->next=p;  
  86.             r=p;  
  87.          }  
  88.      }  
  89.      while(s1!=NULL)  
  90.      {  
  91.         c=s1->coef;  
  92.         e=s1->exp;  
  93.         s1=s1->next;  
  94.         if(c!=0)  
  95.         {  
  96.             p=(ListNode*)malloc(sizeof(ListNode));  
  97.             p->coef=c;  
  98.             p->exp=e;p->next=NULL;  
  99.             if(s==NULL)  
  100.             s=p;  
  101.             else  
  102.             r->next=p;  
  103.             r=p;  
  104.          }  
  105.      }  
  106.      while(s2!=NULL)  
  107.      {  
  108.         c=s2->coef;  
  109.         e=s2->exp;  
  110.         s2=s2->next;  
  111.         if(c!=0)  
  112.         {  
  113.             p=(ListNode*)malloc(sizeof(ListNode));  
  114.             p->coef=c;  
  115.             p->exp=e;p->next=NULL;  
  116.             if(s==NULL)  
  117.             s=p;  
  118.             else  
  119.             r->next=p;  
  120.             r=p;  
  121.          }  
  122.      }  
  123.      return s;  
  124.   }   
  125. void deletepoly(ListNode *h)  
  126. //释放多项式所占的内存单元   
  127. {  
  128.     ListNode *p,*r=h;  
  129.     while(r!=NULL)  
  130.     {  
  131.         p=r->next;  
  132.         free(r);  
  133.         r=p;  
  134.     }  
  135. }  
  136. int main()  
  137. {  
  138.     ListNode *head1,*head2,*head;  
  139.     printf("创建第一个多项式:\n");   
  140.     head1=createpoly();  
  141.     printf("创建第二个多项式:\n");  
  142.     head2=createpoly();  
  143.     printf("将两个多项式相加:\n");  
  144.     head=addpoly(head1,head2);  
  145.     disppoly(head);  
  146.     deletepoly(head);  
  147. }  
  148.   </span>  

原创粉丝点击