多项式相加
2015-06-05 23:04
267 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21585773/article/details/46382953
多项式相加
刚学到数据结构 ,看了一下书 ,自己写了一个多项式相加的程序。。~~~~
首先定义相关的数据类型
typedef struct { int coef;//系数 int expon; }Number; typedef struct PolyNode{ Number data; PolyNode *link; }PolyNode; typedef struct HeadNode{ PolyNode *first; }HeadNode; typedef HeadNode List;
主要函数就是两个链表的相加
void PolyNodeAdd(List *L1 ,List *L2 ,List *L3) { PolyNode *p1 ,*p2 ,*newp3; p1 = L1->first; p2 = L2->first; while(p1 && p2) { newp3 = new PolyNode; newp3->link = NULL; if(p1->data.expon == p2->data.expon) { newp3->data.expon = p1->data.expon; newp3->data.coef = p1->data.coef + p2->data.coef; if(newp3->data.coef != 0) Insert(L3 ,newp3); p1 = p1->link; p2 = p2->link; } else if(p1->data.expon > p2->data.expon) { newp3->data.expon = p1->data.expon; newp3->data.coef = p1->data.coef; Insert(L3 ,newp3); p1 = p1->link; } else { newp3->data.expon = p2->data.expon; newp3->data.coef = p2->data.coef; Insert(L3 ,newp3); p2 = p2->link; } } for(;p1;p1 = p1->link) { newp3 = new PolyNode; newp3->link = NULL; newp3->data.expon = p1->data.expon; newp3->data.coef = p1->data.coef; Insert(L3 ,newp3); } for(;p2;p2 = p2->link) { newp3 = new PolyNode; newp3->link = NULL; newp3->data.expon = p2->data.expon; newp3->data.coef = p2->data.coef; Insert(L3 ,newp3); } }
完整的源代码:
# include <stdio.h> # include <stdlib.h> typedef struct { int coef;//系数 int expon; }Number; typedef struct PolyNode{ Number data; PolyNode *link; }PolyNode; typedef struct HeadNode{ PolyNode *first; }HeadNode; typedef HeadNode List; List *L1 ,*L2 ,*L3; List *Creat(List *L) { L = new List; if(!L) return NULL; L->first = NULL; return L; } bool Insert(List *L ,PolyNode *p) { PolyNode *current; current = L->first; if(!current) { L->first = p; p->link = NULL; } else { while(current->link) current = current->link; current->link = p; p->link = NULL; } return true; } void Input(List *L) { int flag = 1; PolyNode *p; while(flag) { p = new PolyNode; p->link = NULL; printf("请输入该项的系数:"); scanf("%d" ,&p->data.coef); printf("请输入该项的指数:"); scanf("%d" ,&p->data.expon); fflush(stdin); Insert(L ,p); printf("是否继续?\n"); scanf("%d" ,&flag); fflush(stdin); } } void Output(List *L) { if(!L->first) return ; PolyNode *current; current = L->first; while(current){ printf("%dX%d" ,current->data.coef ,current->data.expon); if(current->link) printf(" + "); current = current->link; } printf("\n"); } void PolyNodeAdd(List *L1 ,List *L2 ,List *L3) { PolyNode *p1 ,*p2 ,*newp3; p1 = L1->first; p2 = L2->first; while(p1 && p2) { newp3 = new PolyNode; newp3->link = NULL; if(p1->data.expon == p2->data.expon) { newp3->data.expon = p1->data.expon; newp3->data.coef = p1->data.coef + p2->data.coef; if(newp3->data.coef != 0) Insert(L3 ,newp3); p1 = p1->link; p2 = p2->link; } else if(p1->data.expon > p2->data.expon) { newp3->data.expon = p1->data.expon; newp3->data.coef = p1->data.coef; Insert(L3 ,newp3); p1 = p1->link; } else { newp3->data.expon = p2->data.expon; newp3->data.coef = p2->data.coef; Insert(L3 ,newp3); p2 = p2->link; } } for(;p1;p1 = p1->link) { newp3 = new PolyNode; newp3->link = NULL; newp3->data.expon = p1->data.expon; newp3->data.coef = p1->data.coef; Insert(L3 ,newp3); } for(;p2;p2 = p2->link) { newp3 = new PolyNode; newp3->link = NULL; newp3->data.expon = p2->data.expon; newp3->data.coef = p2->data.coef; Insert(L3 ,newp3); } } int main() { L1 = Creat(L1); L2 = Creat(L2); L3 = Creat(L3); Input(L1); system("cls"); Input(L2); Output(L1); Output(L2); system("pause"); system("cls"); PolyNodeAdd(L1 ,L2 ,L3); Output(L3); system("pause"); return 0; }
写完之后感觉有的不足:
把数据输入到链表中的时候只能按系数的大小输入,应该可以用堆排序解决吧!
相关文章推荐
- 多项式相加 单链表实现
- 数据结构 一元多项式相加
- 【Weiss】【第03章】练习3.6:有序多项式相加
- 一元多项式的相加
- 多项式相加
- 链表形式 写出两个一元多项式相加的算法
- 一元多项式的表示及相加
- c语言:多项式相加的实现
- 一元多项式的相加运算
- 数据结构课程设计一元多项式的相加和相乘
- PAT甲题题解-1002. A+B for Polynomials (25)-多项式相加
- 多项式的排列,两项相加(C语言)
- 一元多项式的相加减
- 1170: 多项式相加
- 重学数据结构001――链表基本操作与一元多项式相加
- 利用链表计算多项式的相加
- 一元多项式表示和相加
- !求两个多项式相加运算
- 利用栈实现两个一元多项式相加
- C语言一元多项式相加问题