1/********************************************************************
 2created:    2005/12/21
 3created:    21:12:2005   10:49
 4filename:     poly.h
 5author:        Liu Qi
 6
 7  purpose:    多项式相关操作的接口与实现
 8*********************************************************************/

 9#ifndef POLY_H
10#define POLY_H
11
12
13#include <stdio.h>
14#include <assert.h>
15#include "../sllist.h"
16
17
18typedef List PolynomialList;
19
20/*===========================================================================
21* Function name:    PolynomialAdd 
22* Parameter:        lhs:多项式
23* Precondition:        NULL != lhs && NULL != rhs, NULL != lhs->Next && NULL != rhs->Next
24* Description:        返回一个新的多项式头指针
25* Return value:        
26* Author:            Liu Qi,  [12/21/2005]
27===========================================================================*/

28PolynomialList PolynomialAdd(PolynomialList lhs, PolynomialList rhs)
29{
30    Position lhsPos = lhs->Next;    //指向第一个多项式的第一个元素
31    Position rhsPos = rhs->Next;    //指向第二个多项式的第一个元素
32    PolynomialList retPolynomialList= SLL_Create();
33    ElemType Elem;
34    
35    assert( NULL != lhs && NULL != rhs );
36    assert( NULL != lhs->Next && NULL != rhs->Next ); 
37    
38    while (NULL != lhsPos && NULL != rhsPos)
39    {
40        //第一个多项式的指数大,复制第一个多项式的一个节点插入到retPolynomialList头部
41        if ((lhsPos->Element.HighPower) > (rhsPos->Element.HighPower))
42        {
43            Elem.coef = lhsPos->Element.coef;
44            Elem.HighPower = lhsPos->Element.HighPower;
45            SLL_PushFront(Elem, retPolynomialList);
46            lhsPos = SLL_NextPos(lhsPos);
47        }

48        else if ((lhsPos->Element.HighPower) < (rhsPos->Element.HighPower))
49        {
50            Elem.coef = rhsPos->Element.coef;
51            Elem.HighPower = rhsPos->Element.HighPower;
52            SLL_PushFront(Elem, retPolynomialList);
53            rhsPos = SLL_NextPos(rhsPos);    
54        }

55        else    //指数相等
56        {
57            Elem.coef = lhsPos->Element.coef + rhsPos->Element.coef;
58            Elem.HighPower = lhsPos->Element.HighPower;
59            SLL_PushFront(Elem, retPolynomialList);
60            lhsPos = SLL_NextPos(lhsPos);
61            rhsPos = SLL_NextPos(rhsPos);
62        }

63    }

64    
65    while (NULL != lhsPos)
66    {
67        Elem.coef = lhsPos->Element.coef;
68        Elem.HighPower = lhsPos->Element.HighPower;
69        SLL_PushFront(Elem, retPolynomialList);
70        lhsPos = SLL_NextPos(lhsPos);
71    }

72    
73    while (NULL != rhsPos)
74    {
75        Elem.coef = rhsPos->Element.coef;
76        Elem.HighPower = rhsPos->Element.HighPower;
77        SLL_PushFront(Elem, retPolynomialList);
78        rhsPos = SLL_NextPos(rhsPos);
79    }

80    
81    return retPolynomialList;
82}

83
84#endif
85


测试代码: