zoukankan      html  css  js  c++  java
  • 循环链表实现两个多项式相加主要代码


    A=a1+b1*X+c1*X^2+d1*X^3+...

    B=a2+b2*X+c2*X^2+d2*X^3+...

    C=(a1+a2)+(b1+b2)*X+(c1+c2)*X^2+(d1+d2)*X^3+...

     1 typedef int datatype;
     2 
     3 typedef struct node{
     4     float coef;//系数
     5     int exp;//指数
     6     struct pnode *next; 
     7 } polynode;
     8 polynode *POLYADD(polynode *A,polynode *B){//A,B是两个多项式,函数返回A,B的多项式 
     9     int i,j,k;
    10     polynode *ptr,   
    11              *q,     //指向和多项式C的指针 
    12              *q1,    //指向A多项式的指向 
    13              *q2;    //指向B多项式的指向 
    14     float x;
    15     q1=A;
    16     q2=B;
    17     q=malloc(sizeof(polynode));   //生成多项式的头节点
    18     q->coef=0;                    //将多项式的头节点赋值
    19     q->exp=-1;
    20     q->next=q;                    //循环链表
    21     ptr=q;                        //ptr指向和多项式的头节点
    22     q1=q1->next;                  //q1指向A的第一个节点
    23     q2=q2->next;                  //q2指向B的第一个节点
    24     while((q1!=A)&&(q2!=B)){
    25         //从低指数到搞指数逐项求和
    26         if(q1->exp==q2->exp){     //指数相同的项
    27            x=q1->coef+q2->coef;   //系数相加
    28            if(x!=0){
    29                q->next=malloc(sizeof(polynode));
    30                q=q->next;
    31                q->coef=x;
    32                q->exp=q1->exp;
    33               } 
    34         q1=q1->next;              //q1指向A的下一个节点
    35         q2=q2->next;              //q2指向B的下一个节点            
    36         } 
    37         else{
    38             //指向不同的项
    39             q->next=malloc(sizeof(polynode));
    40             q=q->next;
    41             if(q1->exp>q2->exp){   //如果A多项式当前项的指数大于B的
    42                q->coef=q2->coef;
    43                q->exp=q2->exp;
    44                q2=q2->next;                 
    45             } 
    46             else{
    47                 q->coef=q1->coef;  //如果B多项式当前项的指数大于A的
    48                 q->exp=q1->exp;
    49                 q1=q1->next;
    50             }
    51         }        
    52     } 
    53     while(q1!=A){
    54                q->next=malloc(sizeof(polynode));
    55             q=q->next;
    56             q->coef=q1->coef;
    57             q->exp=q1->exp;
    58             q1=q1->next;    
    59           }
    60    while(q2!=B){
    61                   q->next=malloc(sizeof(polynode));
    62             q=q->next;
    63             q->coef=q2->coef;
    64             q->exp=q2->exp;
    65             q2=q2->next;
    66           }
    67    q->next=ptr;   //令多项式最末的节点指向头节点
    68    return ptr;    //返回多项式头节点指针 
    69 }
    View Code
  • 相关阅读:
    npm改为淘宝镜像
    html中table中td内容换行
    git 切换文件夹路径
    git经常使用的命令
    day16
    day15
    day13
    day14
    day12
    day11
  • 原文地址:https://www.cnblogs.com/aijianiula/p/3094130.html
Copyright © 2011-2022 走看看