zoukankan      html  css  js  c++  java
  • 【数据结构】多项式的运算

    题意理解

    已知两个多项式:
    (1)(3x^4-5x^2+6x-2)
    (2)(5x^{20}-7x^4+3x)

    多项式和:
    (5x^{20}-4x^4-5x^2+9x-2)
    多项式乘积:
    ((a+b)(c+d)=ac+ad+bc+bd)

    输入样例:

    4 3 4 -5 2 6 1 -2 0
    3 5 20 -7 4 3 1
    

    输出样例:

    15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
    5 20 -4 4 -5 2 9 1 -2 0
    

    求解思路

    1. 多项式表示 //首先是明确使用的数据结构
    2. 程序框架 //对程序整体有一个规划,下面的四步就是读入、加、乘、输出
    3. 读多项式
    4. 加法实现
    5. 乘法实现
    6. 多项式输出
      理解起来也好理解呀。有明确的步骤,做起事来才不慌啊。

    多项式的表示

    仅表示非零项

    数组:
    变成简单、调试容易;需要实现确定数组大小

    链表:
    动态性强;编程略复杂、调试比较困难

    可以使用动态数组来实现 因为已经告诉了有多少项

    数据结构设计

    typedef struct PolyNode *Polynomial;
    struct PolyNode{
        int coef;
        int expon;
        Polynomial link;
    };
    

    程序框架搭建

    int main(){
        读入多项式1
        读入多项式2
        乘法运算并输出
        加法运算并输出
        return 0;
    }
    

    需要设计的函数:
    读入
    相乘
    相加
    输出

    int main(){
        Polynomial P1,P2,PP,PS;
        P1=ReadPoly();
        p2=ReadPoly();
        PP=Mult(P1,P2);
        PrintPoly(PP);
        PS=Add(P1,P2);
        printPoly(PS);
        return 0;
    }
    

    如何读入多项式

    Polynomial ReadPoly(){
        Polynomial P, Rear,t;
        int c,e,N;
    
        scanf("%d",&N);
        P=(Polynomial)malloc(sizeof(struct PolyNode));//弄一个节点放在最前面,使得操作更具有一致性
        P->link=NULL;
        while(N--){
            scanf("%d %d",&c,&d);
            Attcah(c,e,&Rear);
        }
        t=P;p-P->link;free(t); //将多申请的节点去掉
        return P;
    }
    

    Rear初值是多少

    1. Rear初值为NULL
    2. Rear指向一个空节点(推荐,一致性比较强)
    void Attach(int c,int e, Polynomial *pRear){
        Polynomial P;
        P=(Polynomial)malloc(sizeof(struct PolyNode));
        P->coef=c;
        P->expon=e;
        P->link=NULL;
        (*pRear)->link=P;
        *pRear=P;
    }
    
    
    Polynomial Add(Polynomial P1,Polynomial P2){
        Polynomial t1=P1,t2=P2;
        Polynomial Rear,P=(Polynomial)malloc(sizeof(struct PolyNode)),t;
        P->Next=NULL;
        Rear = P;
        
        while(t1&&t2){
            if(t1->expon==t2->expon){
                Attach(t1->coef+t2->coef, t1->expon, &Rear);
                t1=t1->Next;
                t2=t2->Next;
            }
            else if(t1->expon>t2->expon){
                Attach(t1->coef, t1->expon, &Rear);
                t1=t1->Next;
            }
            else{
                Attach(t2->coef, t2->expon, &Rear);
                t2=t2->Next;
            }
        }
        while(t1){
            Attach(t1->coef, t1->expon, &Rear);
            t1=t1->Next;
        }
        while (t2) {
            Attach(t2->coef, t2->expon, &Rear);
            t2=t2->Next;
        }
        
        t=P;P=P->Next;free(t);
        
        return P;
    };
    
    void PrintPoly(Polynomial P){
        Polynomial t=P;
        int first =1;
        while(t){
            if(first==1){
                printf("%d %d",t->coef,t->expon);
                first=0;
                t=t->Next;
            }else{
                printf(" %d %d",t->coef,t->expon);
                t=t->Next;
            }
        }
    };
    
    
  • 相关阅读:
    TF.VARIABLE和TENSOR的区别(转)
    同步与异步,阻塞与非阻塞的区别
    tensorflow op tf.global_variables_initializer
    iOS viewDidUnload方法
    Objective-C中的@property和@synthesize用法
    UIDatePicker的时间选择器里的时区的问题
    IOS 小技巧积累
    IOS atomic与nonatomic,assign,copy与retain的定义和区别
    XCODE4.6从零开始添加视图
    Xcode无法设置视图的 autosizing control原因
  • 原文地址:https://www.cnblogs.com/maxwell-maxwill/p/12314950.html
Copyright © 2011-2022 走看看