c0201时遇到的问题
来源:互联网 发布:歼十模型淘宝 编辑:程序博客网 时间:2024/06/13 13:52
多项式合并同类项,实现乘法加法
#include<stdio.h>#include<stdlib.h>struct PolyNode{ int coef; int expon; struct PolyNode* link;};typedef struct PolyNode *Polynomial;Polynomial ReadPoly(void);void Attach(int c, int e, Polynomial *pRear);Polynomial Add(Polynomial P1,Polynomial P2);Polynomial Mult(Polynomial P1,Polynomial P2);void PrintPoly(Polynomial P);int main(){ Polynomial P1,P2,PP,PS; P1 = ReadPoly(); P2 = ReadPoly(); PP = Mult(P1,P2); PrintPoly( PP ); PS = Add(P1,P2); printf("\n"); PrintPoly( PS ); while(1); return 0;}Polynomial ReadPoly(){ Polynomial P,Rear,t; int c,e,N; scanf("%d",&N); P = (Polynomial)malloc(sizeof(struct PolyNode)); /*链表头空结点*/ P->link = NULL; Rear = P; while(N--){ scanf("%d %d", &c, &e); Attach(c,e,&Rear); /*c函数的传值属性,由于Attach后Rear的值需要改变,所以一定是传入Rear的地址&*/ } t = P; P = P->link; free(t); /*删除临时生成的头结点*/ return P;}void Attach(int c, int e, Polynomial *pRear) /*pRear是指针的指针*/{ Polynomial P; P = (Polynomial)malloc(sizeof(struct PolyNode)); P->coef = c; P->expon = e; P->link = NULL; (*pRear)->link = P; *pRear = P; }Polynomial Add(Polynomial P1,Polynomial P2){ int sum ; /*一定要先全定义后,再赋值*/ Polynomial Rear,P,temp; /*头结点,当前位置,返回的指针,插入时用来申请空间的结点,最后释放空结点的指针*/ Polynomial t1,t2; /*先初始化!!!!!*/ t1 = P1; t2 = P2; P = (Polynomial)malloc(sizeof(struct PolyNode));P->link=NULL; Rear = P; /*Rear指向尾巴*/ while(t1 && t2){ if(t1->expon == t2->expon){ sum = t1->coef + t2->coef; if( sum ) Attach(sum, t1->expon, &Rear); t1 = t1->link; t2 = t2->link; } else if(t1->expon > t2->expon){ Attach(t1->coef,t1->expon,&Rear); t1 = t1->link; } else{ Attach(t2->coef,t2->expon,&Rear); t2 = t2->link; } } while(t1){ Attach(t1->coef,t1->expon,&Rear); t1 = t1->link; } while(t2){ Attach(t2->coef,t2->expon,&Rear); t2 = t2->link; } Rear->link = NULL; temp = P; P = P->link; free(temp); return P; }Polynomial Mult(Polynomial P1,Polynomial P2){ Polynomial P,Rear,t1,t2,t; int c,e; if(!P1||!P2) return NULL; /*都为空*/ t1 = P1;t2 = P2; P = (Polynomial)malloc(sizeof(struct PolyNode)); P->link = NULL; Rear = P; while(t2){ /*先用P1的第一项乘以P2,得到P,构造一个初始多项式*/ Attach(t1->coef*t2->coef,t1->expon+t2->expon,&Rear); t2 = t2->link; } t1 = t1->link; while(t1){ /*这个两重循环用t1的每一项乘t2的每一项*/ t2 = P2; Rear = P;/*重新赋值此时Rear和P指向的是头空结点*/ while(t2){ e = t1->expon + t2->expon; c = t1->coef * t2->coef; /*构造后如何插入*/ while( Rear->link && Rear->link->expon > e) Rear = Rear->link; /*找到Rear->link不大于插入项*/ if(Rear->link && Rear->link->expon == e){ if( Rear->link->coef+c) /*非零项才插入*/ Rear->link->coef += c; else{ t = Rear->link; Rear->link = t->link; free(t); /*零项不插入 释放*/ } } else{ /*Rear->link->expon小于插入的项,那么直接插入到Rear的后面*/ t = (Polynomial)malloc(sizeof(struct PolyNode)); t->coef = c; t->expon = e; t->link = Rear->link; Rear->link = t; Rear = Rear->link; /*此为Insert不是Attach*/ } t2 = t2->link; } t1 = t1->link; } /*对于最后的结果处理 合并同类项*/ t2 = P; P = P->link; free(t2); /*删除空头结点*/ return P;}void PrintPoly(Polynomial P){ int flag = 0; /*辅助调整输出格式*/ if(!P){printf("0 0\n");return;} /*P为空*/ while( P ){ if(!flag) flag = 1; else printf(" "); printf("%d %d", P->coef, P->expon); P = P->link; }}
阅读全文
0 0
- c0201时遇到的问题
- c0201时遇到的问题
- 练习时遇到的问题
- lfs 时遇到的问题
- 面试时遇到的问题
- Web2Maven时遇到的问题
- 格式化时遇到的问题
- activemq时遇到的问题
- 前端时遇到的问题
- 编译ORBSlam2的时遇到的问题
- 安装 JDK1.5.0 时遇到的问题
- 安装eclipse时遇到的问题
- 安装Linux时遇到的问题
- 用msn时遇到的问题
- SqlDataReader 读取记录时遇到的问题
- 今天练习.NET时遇到的问题
- 使用sourcesafe时遇到的问题
- 做MDB时遇到的一个问题
- bzoj2429 [HAOI2006]聪明的猴子(prim)
- matplotlib的简单应用
- glide加载gif动态图
- Tomcat简介
- Python(4) 序列
- c0201时遇到的问题
- Python(5) 面向对象相关
- impdp或expdp报错ORA-39002: invalid operation,ORA-39070: Unable to open the log file
- Python(6) 异常处理
- two_sum
- 快速掌握Glide图片加载的强大功能你如果
- 设计模式13-策略模式
- c++设计模式三,工厂模式
- 洛谷 P1220 关路灯