首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

正常线性表-链式存储结构及其操作算法的实现-多项式的代数运算

2013-03-16 
一般线性表-----链式存储结构及其操作算法的实现-----多项式的代数运算//多项式加法!#includeiostream#i

一般线性表-----链式存储结构及其操作算法的实现-----多项式的代数运算

//多项式加法!#include<iostream>#include "list_link.h"using namespace std;struct polynode{    int coef;//系数    int exp;//指数};link <polynode> a,b,c;void PolyAdd(link<polynode>a,link<polynode>b,link<polynode>c);void show(link<polynode>x);int main(){    freopen("in.txt","r",stdin);    int n;    node<polynode>* m;    polynode x;//     printf("请输入第一个多项式\n");    cin >> n >> x.coef >> x.exp;    a.Insert(x,a.First());    for(int i=1; i<=n-1; i++)    {        cin >> x.coef >> x.exp;        m=a.First();        while(m!=a.End())        {            if(a.Retrieve(m).exp>x.exp) m=a.Next(m);            else break;        }        a.Insert(x,m);    }//    printf("请输入第二个多项式\n");    cin >> n >> x.coef >> x.exp;    b.Insert(x,b.First());    for(int i=1; i<=n-1; i++)    {        cin >> x.coef >> x.exp;        m=b.First();        while(m!=a.End())        {            if(b.Retrieve(m).exp>x.exp) m=b.Next(m);            else break;        }        b.Insert(x,m);    }//插入的时候就按顺序插入,省的排序!    PolyAdd(a,b,c);    show(a);    printf("+");    show(b);    printf("=");    show(c);    return 0;}void show(link<polynode>x){    node<polynode>  *i;    i=x.First();    while(i->next!=x.End())    {        printf("%d*x^%d+",x.Retrieve(i).coef,x.Retrieve(i).exp);        i=x.Next(i);    }    printf("%d*x^%d",x.Retrieve(i).coef,x.Retrieve(i).exp);}void PolyAdd(link<polynode> a,link<polynode> b,link<polynode> c){    polynode temp;    node<polynode>*p1=a.First(),*i,*p2=b.First();//指向节点类型的指针    while(a.Next(p1)!=NULL&&b.Next(p2)!=NULL)    {        if(a.Retrieve(p1).exp>b.Retrieve(p2).exp)        {            c.Insert(a.Retrieve(p1),c.End());            p1=a.Next(p1);        }        else if(a.Retrieve(p1).exp<b.Retrieve(p2).exp)        {            c.Insert(b.Retrieve(p2),c.End());            p2=b.Next(p2);        }        else        {            temp.coef=a.Retrieve(p1).coef;            temp.exp=a.Retrieve(p1).exp;            temp.coef+=b.Retrieve(p2).coef;            c.Insert(temp,c.End());            p1=a.Next(p1);            p2=b.Next(p2);        }    }    if(p1!=a.End())    {        for(i=p1; i!=a.End(); i=a.Next(i))            c.Insert(a.Retrieve(i),c.End());    }    if(p2!=b.End())    {        for(i=p2; i!=b.End(); i=b.Next(i))            c.Insert(b.Retrieve(i),c.End());    }}


热点排行