两个多项式相加的程序(链表)
来源:互联网 发布:策略设计模式java实例 编辑:程序博客网 时间:2024/05/18 02:32
思路:
1、定义结构体struct,包含元素coef,exp
2、创建链表输入函数
polypointer createLink(int n);
3、创建两个多项式相加的函数
polypointer PolyAdd(polypointer a,polypointer b);
其中,PolyAdd函数调用函数
polypointer Attach(int e,int c,polypointer d);
char compare(int a,int b);
4、打印结果函数
void PrintList(polypointer h);
当前存在问题,结果很奇怪,前边总是有一串很奇怪的数字
,而且在变化,说明该空间是没有确定分配的
#include <stdio.h>#include <stdlib.h>struct polynode{ int exp; int coef; struct polynode *link;};typedef struct polynode *polypointer;char compare(int a,int b);polypointer createLink(int n);void PrintList(polypointer h);polypointer Attach(int e,int c,polypointer d);polypointer PolyAdd(polypointer a,polypointer b);int main(){ int m,n; //多项式的项数 polypointer a,b,c; printf("请输入多项式 A 的项数 : ") ; //构造多项式A scanf("%d",&m) ; a=createLink(m) ; //PrintList(a); printf("请输入多项式 B 的项数 : ") ; //构造多项式B scanf("%d",&n) ; b=createLink(n) ; //PrintList(b); c=PolyAdd(a,b); PrintList(c); return 0;}//创建链表输入函数polypointer createLink(int n){ polypointer head; polypointer p,pre; int i; head=(polypointer)malloc(sizeof(struct polynode)); head->link= NULL; pre=head; for(i=1;i<=n;i++) { p=(polypointer)malloc(sizeof(struct polynode)); printf("请输入指数"); scanf("%d",&p->exp); printf("请输入系数"); scanf("%d",&p->coef); pre->link=p; pre=p; } p->link=NULL; return head;}//创建链表输出函数void PrintList(polypointer h){ polypointer p; p=h->link; while(p) { printf("%d*X^%d ",p->coef,p->exp); p=p->link; printf("\n"); }}//比较两个数字的大小char compare(int a,int b){ int c=a-b; if(c==0){ return '='; }else if(c>0){ return '>'; }else{ return '<'; }}//建立一个新节点,把它链接到c结点的后边,并且返回新节点的新指针,即当前节点的指针polypointer Attach(int c,int e,polypointer d){ polypointer x; x=(polypointer)malloc(sizeof(struct polynode)); x->coef=c; x->exp=e; d->link=x; return x;}polypointer PolyAdd(polypointer a,polypointer b){ polypointer p,q; polypointer c,d; **p=a->link;q=b->link;** int x; c=(polypointer)malloc(sizeof(struct polynode)); //c->link =NULL; d=c; while((p!=NULL) && (q!=NULL)) { switch(compare(p->exp,q->exp)) { case'=': x=p->coef+q->coef; if(x!=0) d= Attach(x,p->exp,d); p=p->link;q=q->link; break; case'>': d=Attach(p->coef,p->exp,d); p=p->link; break; case'<': d=Attach(q->coef,q->exp,d); q=q->link; break; } } while(p!=NULL){ d=Attach(p->coef,p->exp,d); p=p->link; } while(q!=NULL){ d=Attach(q->coef,q->exp,d); q=q->link; } d->link =NULL; //p=c;c=c->link; //free(p);//删除临时用的结点 return c;//指向第一个元素的指针}
阅读全文
0 0
- 两个多项式相加的程序(链表)
- 两个一元多项式相加(链表 || 顺序表实现)
- 数据结构:求两个多项式的相加运算
- 编写将两个多项式相加的函数
- 两个多项式相加!
- 两个多项式相加
- 两个多项式相加
- 两个一元多项式相加
- 一元多项式相加程序(C语言)
- !求两个多项式相加运算
- 求两个多项式相加运算
- 两个多项式相加及相乘
- STL编程:两个多项式相加
- C语言实现多项式的相加(链表)
- (链表实现)写出两个一元多项式相加的算法
- 线性表的应用——求解两个多项式相加问题描述(顺序表求解)
- 线性表的应用——求解两个多项式相加问题描述(链表求解)
- 线性表的应用——求解两个多项式相加问题描述(顺序表求解)
- 前后端数据对接
- 学生信息管理系统优化
- C++风格_规则特例
- 程序流程控制
- noip2015 游记+总结+题解
- 两个多项式相加的程序(链表)
- python调用Shell脚本:os.system(cmd)或os.popen(cmd)的区别
- UVA11468 AC自动机+记忆化搜索
- CodeForces347A
- dbcp连接池配置问题导致oracle ORA-01000: 超出打开游标的最大数
- [Noip模拟题]山峰
- Tsinghua Online Judge -- ⑨的完美文本编辑器
- 中小型研发团队架构实践三要点
- Spark SQL, DataFrames and Datasets Guide