zoukankan      html  css  js  c++  java
  • 线性结构应用实例:多项式加法运算

    采用不带头结点的单向链表,按照指数递减的顺序排列各项:

      

    struct PolyNode{
        int coef;   //系数
        int expon;  //指数
        struct PolyNode *link;  //指向下一个结点的指针
    };
    typedef struct PolyNode *Polynomial;
    Polynomial P1,P2;

    算法思路:两个指针P1和P2分别指向这两个多项式第一个结点,不断循环;

    1. P1->expon==P2->expon:系数相加,若结果不为0,则作为结果多项式对应项的系数。同时,P1heP2d都分别指向下一项;
    2. P1->expon>P2->expon:将P1的当前项存入结果多项式,并使P1指向下一项;
    3. P1->expon<P2->expon:将P2的当前项存入结果多项式,并使P2指向下一项;

     当某一多项式处理完时,将另一个多项式的所有结点依次复制到结果多项式中去。

    Polynomial PolyAdd(Polynomial P1,Polynomial P2)
    {
        Polynomial front,rear,temp;
        int sum;
        rear = (Polynomial)malloc(sizeof(struct PolyNode));
        front = rear;   /*由front记录结果多项式链表头节点*/
        while(P1&&P2)   /*当两个多项式都有非零项待处理时*/
        {
            switch(Compare(P1->expon,P2->expon)){
                case 1:
                        Attach(P1->coef,P1->expon,&rear);
                        P1 = P1->link;
                        break;
                case -1:
                        Attach(P2->coef,P2->expon,&rear);
                        P2 = P2->link;
                        break;
                case 0:
                        sum = P1->coef + P2->coef;
                        if(sum) 
                            Attach(sum,P1->expon,&rear);
                        P1 = P1->link;
                        P2 = P2->link;
                        break;
            }
        }
        /*将未处理完的另一个多项式的所有结点依次复制到结果多项式中去*/
        for(;P1;P1 = P1->link)
            Attach(P1->coef,P1->expon,&rear);
        for(;P2;P2 = P2->link)
            Attach(P2->coef,P2->expon,&rear);
        rear->link = NULL;
        temp = front;
        front = front->link;/*令front指向结果多项式第一个非零项*/
        free(temp); /*释放临时空表头结点*/
        return front;
    }
    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;     /*修改pRear值*/
    }
  • 相关阅读:
    XML
    基于SQL的全文检索引擎Sphinx
    php中的Session与Cookie
    公共网关接口CGI(Common GatewayInterface)
    Memcached、memcached、memcache
    MemCache
    在windows上使用symfony创建简易的CMS系统(三)
    在windows上使用symfony创建简易的CMS系统(二)
    在windows上使用symfony创建简易的CMS系统(一)
    Window7上搭建symfony开发环境(PEAR)
  • 原文地址:https://www.cnblogs.com/King-boy/p/10523541.html
Copyright © 2011-2022 走看看