顺序表应用之两个一元多项式求和
2016-02-18 23:09
573 查看
#include <stdio.h> #include <malloc.h> typedef struct node{ int coef;//系数 int exp;//指数 struct node *next; }NODE; NODE *creatPoly(){ int coef; int exp; NODE *head,*tail,*s;//链表头结点,尾结点,带插入的结点 //新建一个不含数据,指向第一个结点的头结点 head=(NODE *)malloc(sizeof(NODE)); head->next=NULL; //链表初始状态时候头尾结点指向一起 tail=head; printf("请输入系数和指数,中间用逗号分开\n"); printf("ceof,exp: "); scanf("%d,%d",&coef,&exp); //printf("\n"); while(coef){ s=(NODE *)malloc(sizeof(NODE)); s->coef=coef; s->exp=exp; s->next=NULL; tail->next=s; tail=s; fflush(stdin);//清除缓存 printf("ceof,exp: "); scanf("%d,%d",&coef,&exp); } return head; } void printPoly(NODE *head){ NODE *node; node=head->next; printf("一元多项式为:"); while(node!=NULL){ printf("%d*X^%d ",node->coef,node->exp); node=node->next; } printf("\n"); } /*算法思路为将a,b一元多项式合并到a,然后返回a*/ NODE *polyAdd(NODE *poly_a,NODE *poly_b){ int sum; NODE *p,*q,*pre,*temp;//定义poly_a,poly_b头结点指向的第一个结点p,q pre为p的前驱结点,temp为临时结点 p=poly_a->next; q=poly_b->next; pre=poly_a;//开始时pre就指向p的前驱 while(p&&q){ if(p->exp>q->exp){ temp=q->next; q->next=p; pre=q; q=temp; free(q); } else if(p->exp==q->exp){ sum=p->coef+q->coef; if(sum==0){ pre=p; p=p->next; temp=q; q=q->next; free(temp); }else{ p->coef=sum; pre=p; p=p->next; temp=q; q=q->next; free(temp); } }else{ pre=p; p=p->next; } } //如果q还没有结束,将q接在p链尾 if(q!=NULL){ pre->next=q; free(q); } return poly_a; } int main(){ printf("请输入第一组一元多项式\n"); NODE *poly_a=creatPoly(); printPoly(poly_a); printf("请输入第二组一元多项式\n"); NODE *poly_b=creatPoly(); printPoly(poly_b); NODE *result=polyAdd(poly_a,poly_b); printf("一元多项式相加\n") printPoly(result); }
相关文章推荐
- java 基础 泛型使用总结
- html
- metro风格的特点
- metro风格的特点
- JSP的自定义标签(五)之Tag File
- UVa--12716 GCD XOR(math)
- 英特尔的这些黑科技你一定没见过
- 4.17.0 RSA 私钥和公钥的一些自己的理解
- java内部类学习与总结
- Codeforces Gym 100269G Garage 数学
- 当模版类遇上友元函数
- 数据类型
- 读书笔记 -《Python 黑帽子》 ( 一 )
- 处理XSS漏洞的工具类代码
- react-native启动异常,react-deep-force-update/.babelrc
- 《招聘一个靠谱的 iOS》—参考答案(下)
- 面试1--HashMap跟Hashtable之间的区别
- 4--静态链表
- 七牛云存储刷新缓存
- 归档备份