两个多项式相加

来源:互联网 发布:淘宝销售法则有哪些 编辑:程序博客网 时间:2024/06/05 04:53

编写将两个多项式相加的函数。不要毁坏输入数据。如果这两个多项式分别有M项和N项,那么你的程序的复杂度是多少。

#include <stdio.h>#include <stdlib.h>struct poly_list;typedef struct poly_list *Poly;typedef struct poly_list *Position;struct poly_list{    int coef;    int Exp;    Position next;};//createPoly Create(){  Poly p=malloc(sizeof(struct poly_list));  p->coef=-1;  p->Exp=-1;  p->next=NULL;  return p;}//insertvoid Insert(int coeff,int exponent,Poly p_root){    Position p=p_root;   while(p->next!=NULL)   {     p=p->next;   }    Position p_tem=malloc(sizeof(struct poly_list));    p_tem->coef=coeff;    p_tem->Exp=exponent;    p_tem->next=p->next;    p->next=p_tem;}void traverse(Poly p_root){    if(p_root->next==NULL)        printf("error ,the list is empty\n");    else    {        Position p_tem=p_root->next;        while(p_tem!=NULL)        {            printf("(%d,%d)\n",p_tem->coef,p_tem->Exp);            p_tem=p_tem->next;        }    }}Poly Add(Poly p_1,Poly p_2){    if(p_1->next==NULL&&p_2->next!=NULL)        return p_2;    if(p_1->next!=NULL&&p_2->next==NULL)        return p_1;    if(p_1->next==NULL&&p_2->next==NULL)        return NULL;    if(p_1->next!=NULL&&p_2->next!=NULL)    {        Poly p_3=Create();        Position p1_tem=p_1->next;        Position p2_tem=p_2->next;        int p1_exp;        int p2_exp;        while(p1_tem!=NULL)        {            p1_exp=p1_tem->Exp;            while(p2_tem!=NULL)            {                p2_exp=p2_tem->Exp;                if(p1_exp==p2_exp)                {                    Insert(p1_tem->coef+p2_tem->coef,p1_exp,p_3);                    p2_tem=p2_tem->next;                    p1_tem=p1_tem->next;                    break;                }                if(p1_exp<p2_exp)                {                    Insert(p2_tem->coef,p2_exp,p_3);                    p2_tem=p2_tem->next;                }                if(p1_exp>p2_exp)                {                    Insert(p1_tem->coef,p1_exp,p_3);                    p1_tem=p1_tem->next;                    break;                }            }            if(p2_tem==NULL)                break;       }       while(p1_tem!=NULL)       {            Insert(p1_tem->coef,p1_exp,p_3);            p1_tem=p1_tem->next;       }       while(p2_tem!=NULL)       {            Insert(p2_tem->coef,p2_tem->Exp,p_3);            p2_tem=p2_tem->next;       }    return p_3;    }}int main(){Poly p_root1=Create();Insert(10,1000,p_root1);Insert(5,14,p_root1);Insert(1,0,p_root1);Poly p_root2=Create();Insert(3,1990,p_root2);Insert(-2,1492,p_root2);Insert(11,1,p_root2);Insert(5,0,p_root2);Poly p_root3=Add(p_root1,p_root2);traverse(p_root3);return 0;}

复杂度为O(m+n);
习题二(栈)待续。。。

0 0
原创粉丝点击