用链式线性表实现两个一元多项式相加
2016-03-26 16:38
453 查看
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; typedef struct PolyNode { int coef; int exp; PolyNode *next; }node; node * CreatPoly(){ PolyNode *h,*tail,*s; int coef,exp; h=( PolyNode *)malloc(sizeof(node)); h->next=NULL; tail=h; cout<<"coef,exp: "; scanf("%d,%d",&coef,&exp); while (coef){ PolyNode *s=( PolyNode *)malloc (sizeof(node)); s->coef=coef; s->exp=exp; s->next=tail->next; tail->next=s; tail=s; cout<<"coef,exp: "; scanf("%d,%d",&coef,&exp); } return h; } void PolyAdd(node *Polya,node *Polyb){ node *p,*q,*pre,*temp; p=Polya->next; q=Polyb->next; pre=Polya; int sum; while (p&&q){ if(p->exp < q->exp){ pre->next = p; pre = p; p = p->next; }else if(p->exp > q->exp){ pre->next = q; pre = q; q = q->next; } else{ sum=p->coef + q->coef ; if(sum){ p->coef=sum; pre->next=p; pre=p; p=p->next; temp=q->next; free(q); q=temp; }else{ temp=p->next; free(p); p=temp; temp=q->next; free(q); q=temp; } } } pre->next = p ? p:q; } int PrintPoly(node *h){ node *p=h->next; while (p){ printf("%d*x^%d ",p->coef,p->exp); p=p->next; } cout<<endl; return 1; } int main() { node *Polya,*Polyb; cout<<"请输入第一个一元多项式的系数和指数(假定以输入系数为0来结束)"<<endl; Polya= CreatPoly(); cout<<"请输入的第一个一元多项式为"<<endl; PrintPoly(Polya); cout<<"请输入第二个一元多项式的系数和指数(假定以输入系数为0来结束)"<<endl; Polyb= CreatPoly(); cout<<"请输入的第二个一元多项式为"<<endl; PrintPoly(Polyb); cout<<"这两个一元多项式相加后的结果为"<<endl; PolyAdd(Polya,Polyb); PrintPoly(Polya); return 0; }
相关文章推荐
- LATEX入门笔记
- 四则运算3
- storm事件管理器EventManager源码分析-event.clj
- 01-复杂度1 最大子列和问题 (20分)
- 刷题第一天:南邮NOJ斐波那契数列
- 安卓自定义组件之------->卫星菜单
- Linux中的mmap的使用
- 尝试手写模拟mybatis(未加入xml版)
- 3supervisor启动worker源码分析-worker.clj
- PHP设计模式 工厂设计模式
- nyoj--93 汉诺塔(三)(stack)
- CVE-2015-3636
- 深入了解AngularJs-Ui-router(2)
- linux文件系统
- storm源码分析2之任务分配--task assignment
- 20160323作业
- uva 12665 - Joking with Fermat's Last Theorem 题解
- BZOJ1932 [Shoi2007]Setstack 集合堆栈机
- 巴什博弈
- 配置realsense和opencv