数据结构-多项式
来源:互联网 发布:怎么做钓鱼软件 编辑:程序博客网 时间:2024/04/30 10:26
#include <map>#include <set>#include <queue>#include <stack>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int MAX_TERMS = 1000;typedef struct{ float coaf; int expon;}polynomial;polynomial terms[MAX_TERMS];int avail = 0;void init(int *starta, int *finisha, int *startb, int *finishb){ int n; scanf("%d", &n); //poly a's input for(int i = 0; i < n; i++){ scanf("%f %d", &terms[i].coaf, &terms[i].expon); } *finisha = n-1; *startb = n; scanf("%d", &n); //poly b's input for(int i = 0; i < n; i++){ scanf("%f %d", &terms[*startb+i].coaf, &terms[*startb+i].expon); } *finishb = *startb+n-1; avail = *finishb+1;}bool CMP(polynomial a, polynomial b){ return a.expon < b.expon;}int cmp(int a, int b){ if(a < b) return -1; if(a > b) return 1; return 0;}void attach(float cofficient, int expon){ if(avail == MAX_TERMS){ printf("Too many terms in the polynomial\n"); exit(1); } terms[avail].coaf = cofficient; terms[avail++].expon = expon;}void padd(int starta, int finisha, int startb, int finishb, int *startd, int *finishd){ float cofficient; *startd = avail; while(starta <= finisha && startb <= finishb) { switch(cmp(terms[starta].expon, terms[startb].expon)) { case -1: //a.expon < b.expon attach(terms[startb].coaf, terms[startb].expon); startb++; break; case 0: //a.expon = b.expon cofficient = terms[startb].coaf+terms[starta].coaf; attach(cofficient, terms[startb].expon); starta++; startb++; break; case 1: //a.expon > b.expon attach(terms[starta].coaf, terms[starta].expon); starta++; break; } } for( ;starta <= finisha; starta++){ attach(terms[starta].coaf, terms[starta].expon); } for( ;startb <= finishb; startb++){ attach(terms[startb].coaf, terms[startb].expon); } *finishd = avail-1;}void Solve(int *startd, int *finishd, float cofficient, int expon){ for(int i = *startd; i <= *finishd; i++){ if(terms[i].expon == expon){ terms[i].coaf = terms[i].coaf+cofficient; return; } } if(avail == MAX_TERMS){ printf("Too many terms in the polynomial"); exit(1); } terms[avail].coaf = cofficient; terms[avail++].expon = expon; *finishd = avail-1;}void Mult(int starta, int finisha, int startb, int finishb, int *startd, int *finishd){ float cofficient; int expon; *startd = avail; *finishd = *startd; for(int i = starta; i <= finisha; i++){ for(int j = startb; j <= finishb; j++){ cofficient = terms[i].coaf*terms[j].coaf; expon = terms[i].expon*terms[j].expon; Solve(startd, finishd, cofficient, expon); } } sort(terms+(*startd), terms+(*finishd)+1, CMP);}void print(int start, int finish){ for(int i = start; i <= finish; i++){ cout << terms[i].coaf << " " << terms[i].expon << endl; }}int main(){ int starta, finisha, startb, finishb, startd, finishd; starta = finisha = 0; // init startb = finishb = 0; init(&starta, &finisha, &startb, &finishb); //read_poly padd(starta, finisha, startb, finishb, &startd, &finishd); Mult(starta, finisha, startb, finishb, &startd, &finishd); print(startd, finishd); //print_poly return 0;}
将《数据结构》中的多项式实现了一下,嗯,勇敢的迈出第一步吧
0 0
- 数据结构-多项式
- 数据结构-多项式
- 数据结构 一元多项式相加
- 数据结构之一元多项式
- 数据结构实验,多项式类
- 数据结构 多项式的合并
- 数据结构_1_多项式运算
- 数据结构--一元多项式
- 【数据结构】链表:多项式加法
- 数据结构-一元多项式操作
- 数据结构-一元多项式加减程序
- 数据结构 -- 多项式相加和相乘
- 数据结构实现一元多项式相加
- 数据结构应用-------------多项式的相加
- 数据结构之多项式(C++)
- 多项式【数据结构课设一枚,671原创】
- 数据结构一元多项式运算分析
- [数据结构] 链表实现多项式
- A - 这是在网吧出的题!!
- 【Unix/Linux编程实践】 动手实现简单的more
- 使用yum源安装CDH Hadoop集群
- poj 2516 Minimum Cost KM算法
- 跨域问题:Access-Control-Allow-Origin
- 数据结构-多项式
- UIDeviceOrientation
- G - sorry 没有北门
- 使用Git+msysGit上传项目
- UEFI BIOS模式下Windows系统启动过程以及引导文件修复方法
- Java基础类库简介及lang包介绍
- 前后台切换会调用哪些方法
- HDOJ 1003 Max Sum参考程序
- Eclipse DDMS检测不到设备问题及解决方法