• 【线性表】一元多项式相乘


     

      1 /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
      2 
      3 #include <stdio.h>
      4 #include <stdlib.h>
      5 
      6 typedef struct node
      7 {   int    coef, exp;           //coef:系数     exp:指数
      8     struct node  *next;         //下一项
      9 } NODE;
     10 
     11 NODE* multiplication( NODE *, NODE * , NODE * );
     12 void input( NODE * );
     13 void output( NODE * );
     14 
     15 int main()
     16 {   NODE * head1, * head2, * head3;
     17 
     18     head1 = ( NODE * ) malloc( sizeof(NODE) );
     19     input( head1 );
     20 
     21     head2 = ( NODE * ) malloc( sizeof(NODE) );
     22     input( head2 );
     23 
     24     head3 = ( NODE * ) malloc( sizeof(NODE) );
     25     head3->next = NULL;
     26     head3 = multiplication( head1, head2, head3 );
     27     output( head3 );
     28 
     29     return 0;
     30 }
     31 /* PRESET CODE END - NEVER TOUCH CODE ABOVE */
     32 void input( NODE * head )      //输入顺序:<   -   0~9   ,    >
     33 {   int flag, sign, sum, x;    //sign:系数符号     sum:项系数,指数
     34     char c;
     35 
     36     NODE * p = head;
     37 
     38     while ( (c=getchar()) !='
    ' )
     39     {
     40         if ( c == '<' )
     41         {    sum = 0;
     42              sign = 1;
     43              flag = 1;
     44         }
     45         else if ( c =='-' )
     46              sign = -1;
     47         else if( c >='0'&& c <='9' )
     48         {    sum = sum*10 + c - '0';
     49         }
     50         else if ( c == ',' )
     51         {    if ( flag == 1 )
     52              {    x = sign * sum;
     53                   sum = 0;
     54                   flag = 2;
     55                   sign = 1;
     56              }
     57         }
     58         else if ( c == '>' )
     59         {    p->next = ( NODE * ) malloc( sizeof(NODE) );
     60              p->next->coef = x;                            //项系数
     61              p->next->exp  = sign * sum;                //指数
     62              p = p->next;
     63              p->next = NULL;
     64              flag = 0;
     65         }
     66     }
     67 }
     68 void output( NODE * head )
     69 {
     70     while ( head->next != NULL )
     71     {   head = head->next;
     72         printf("<%d,%d>,", head->coef, head->exp );
     73     }
     74     printf("
    ");
     75 }
     76 NODE* multiplication( NODE *h1, NODE *h2 , NODE *h3 )//不允许修改指针内容
     77 {
     78     NODE *head1, *head2, *head3,*head;//head临时头指针
     79     int max_exp = 0,count_exp = 0;
     80     head1 = h1;
     81     head2 = h2;
     82     head3 = h3;
     83     while(head1->next!=NULL){
     84         while(head2->next!=NULL){
     85             head3->next = (NODE *) malloc(sizeof(NODE));
     86             head3->next->coef = head1->next->coef*head2->next->coef;
     87             head3->next->exp = head1->next->exp+head2->next->exp;
     88             head2 = head2->next;
     89             head3 = head3->next;
     90             head3->next = NULL;
     91             if(head3->exp>max_exp)            //记录最大指数
     92                 max_exp = head3->exp;
     93         }
     94         head2 = h2;      //返回头指针
     95         head1 = head1->next;
     96     }
     97     //合并指数相同的多项式
     98     head = (NODE *)malloc(sizeof(NODE));
     99     head->next = (NODE*)malloc(sizeof(NODE));
    100     head3 = h3;             //返回头指针
    101     head1 = head;
    102     for(count_exp = 0;count_exp<=max_exp;count_exp++){
    103         head->next->coef = 0;
    104         head->next->exp = count_exp;
    105         while(head3->next!=NULL){
    106             if(count_exp == head3->next->exp)
    107                 head->next->coef += head3->next->coef;
    108             head3 = head3->next;
    109         }
    110         //零多项式标志位
    111         if(head->next->coef != 0){
    112             head = head->next;
    113             head->next = (NODE*)malloc(sizeof(NODE));
    114         }
    115         head3 = h3;             //返回头指针
    116     }
    117     head->next = NULL;
    118     return head1;
    119 }
    120 
    121 
    122  

     

  • 相关阅读:
    java中字符串类型的比较
    iOS 检测是否插入耳机
    Model-View-Controller (The iPhone Developer's Cookbook)
    Spring Animation
    CoreImage 自动增强滤镜 以及 系统滤镜查询
    UIView Animation
    CoreImage 查询系统滤镜
    CoreImage 的人脸检测
    Smarty 模板操作
    smarty转载(1)
  • 原文地址:https://www.cnblogs.com/Karma-wjc/p/4023069.html
Copyright © 2020-2023  润新知