《数据结构与算法分析 C语言描述》表,栈与队列部分课后习题

[单链表]多项式乘法_第1张图片

   
   
   
   
  1. //Code by Pnig0s1992  
  2. //Date:2012,3,22  
  3.  
  4. #include   
  5. #include "Header.h"  
  6.  
  7. void MultPolynomial(LinkList Py1,LinkList Py2,LinkList LinkRc);  
  8. void PrintfPolynomial(LinkList LinkRs);  
  9. int main(int argc,char **argv)  
  10. {  
  11.     LinkNode Ploy1;  
  12.     Ploy1.pNext = NULL;  
  13.     Insert(0,6,&Ploy1);  
  14.     Insert(1,5,&Ploy1);  
  15.     Insert(2,4,&Ploy1);  
  16.     Insert(3,3,&Ploy1);  
  17.  
  18.     LinkNode Ploy2;  
  19.     Ploy2.pNext = NULL;  
  20.     Insert(0,10,&Ploy2);  
  21.     Insert(1,9,&Ploy2);  
  22.     Insert(2,8,&Ploy2);  
  23.     Insert(3,7,&Ploy2);  
  24.     LinkNode LinkResult;  
  25.  
  26.     LinkResult.pNext = NULL;  
  27.     MultPolynomial(&Ploy1,&Ploy2,&LinkResult);  
  28.     printf("\nPoly1:");  
  29.     PrintfPolynomial(&Ploy1);  
  30.     printf("\nPloy2:");  
  31.     PrintfPolynomial(&Ploy2);  
  32.     printf("\nThe Multi result:");  
  33.     PrintfPolynomial(&LinkResult);  
  34.     system("pause");  
  35.     return 0;  
  36. }  
  37. //打印多项式乘法结果  
  38. void PrintfPolynomial(LinkList LinkRs)  
  39. {  
  40.     LinkList LinkTemp = LinkRs->pNext;  
  41.     while(LinkTemp != NULL)  
  42.     {  
  43.         printf("+%dX^%d",LinkTemp->Coefficient,LinkTemp->Exponent);  
  44.         LinkTemp = LinkTemp->pNext;  
  45.     }  
  46. }  
  47.  
  48. void MultPolynomial(LinkList Py1,LinkList Py2,LinkList LinkRc)  
  49. {  
  50.     int iTempExp = 0;  
  51.     int iTempCoe = 0;  
  52.     LinkList LinkPy1 = Py1->pNext;  
  53.     LinkList LinkPy2 = Py2->pNext;  
  54.  
  55.     while(LinkPy2 != NULL)  
  56.     {  
  57.         LinkPy1 = Py1->pNext;//每次循环回置头结点  
  58.         while(LinkPy1 != NULL)  
  59.         {  
  60.             iTempExp = LinkPy1->Exponent+LinkPy2->Exponent;  
  61.             iTempCoe = LinkPy1->Coefficient*LinkPy2->Coefficient;  
  62.             if(isEmpty(LinkRc))  
  63.             {  
  64.                 Insert(iTempExp,iTempCoe,LinkRc);  
  65.             }else 
  66.             {  
  67.                 LinkList LinkResult = LinkRc->pNext;  
  68.                 while(LinkResult != NULL)  
  69.                 {  
  70.                     if(LinkResult->Exponent == iTempExp)  
  71.                     {  
  72.                         LinkResult->Coefficient += iTempCoe;  
  73.                         break;  
  74.                     }else if((LinkResult->Exponent < iTempExp && LinkResult->pNext->Exponent > iTempExp) || isLast(LinkResult))  
  75.                     {  
  76.                         Insert(iTempExp,iTempCoe,LinkResult);  
  77.                         break;  
  78.                     }  
  79.                     LinkResult = LinkResult->pNext;  
  80.                 }  
  81.  
  82.             }  
  83.             LinkPy1 = LinkPy1->pNext;  
  84.         }  
  85.         LinkPy2 = LinkPy2->pNext;  
  86.     }