数据结构---多项式的乘积与和(PTA)
来源:互联网 发布:数据脱敏的主要方法 编辑:程序博客网 时间:2024/05/18 13:26
https://pintia.cn/problem-sets/910354764736491520/problems/910354975319912449(一元多项式的乘法和加法)点击打开题目链接
注意:很巧妙地求解办法,技巧很多,需要好好理解,自己想的还不够,先记下,再找时间慢慢消化。
代码:
#include<stdio.h>#include<malloc.h>#include<stdlib.h>//函数状态码定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef struct{ int coef;//系数 int expn;//指数} Term;typedef Term ElemType; //假设线性表中的元素均为typedef struct LNode{ ElemType data;//一个元素,包括系数和指数 struct LNode *next;} LNode,*LinkList;////typedef LinkList Polynomial;LinkList Insert(LinkList &P,LinkList q){ LNode *pre,*p; pre=P; p=P->next; while(p&&p->data.expn>q->data.expn)//如果没到最后一个,并且指数较大,一直后移, //直到找到一个比它小的 { p=p->next;//当前结点 pre=pre->next;//当前结点的后一个结点 } if(!p)//如果当前结点已经到了最后一个 { pre->next=q; q->next=NULL;//直接赋值 } else { if(p->data.expn==q->data.expn)//否则,插入其中 { int sum=(p->data.coef+q->data.coef); if(!sum) { pre->next=p->next; free(p); } else { p->data.coef=sum; } } else { pre->next=q; q->next=p; } } return P;}LinkList CreatPolyn(LinkList &P,int n){ LinkList q; P=(LNode *)malloc(sizeof(LNode )); if(!P) exit(OVERFLOW); P->next=NULL; for(int i=1; i<=n; i++) { q=(LNode *)malloc(sizeof(LNode)); if(!q) exit(OVERFLOW); scanf("%d %d",&q->data.coef,&q->data.expn);//两个结构体变量,直接写入 P=Insert(P,q);//创建链表 } return P;}LinkList AddPoly(LinkList Pa,LinkList Pb){ LinkList pa,pb,temp; LinkList Pc; Pc=(LNode *)malloc(sizeof(LNode )); if(!Pc) exit(OVERFLOW); Pc->next=NULL; pa=Pa->next; pb=Pb->next; while(pb!=NULL) { temp=pb->next; Pc=Insert(Pc,pb); pb=temp; } while(pa!=NULL) { temp=pa->next; Pc=Insert(Pc,pa); pa=temp; } return Pc;}LinkList MulPoly(LinkList Pa,LinkList Pb){ LinkList pa,pb,pc; LinkList Pc; Pc=(LNode *)malloc(sizeof(LNode )); if(!Pc) exit(OVERFLOW); Pc->next=NULL; pa=Pa->next; pb=Pb->next; while(pa!=NULL) {// LinkList s;// s=(LNode *)malloc(sizeof(LNode));// s->next=NULL; while(pb!=NULL) { LinkList q; q=(LNode *)malloc(sizeof(LNode)); q->data.coef=(pa->data.coef)*(pb->data.coef); q->data.expn=(pa->data.expn)+(pb->data.expn); Pc=Insert(Pc,q); pb=pb->next; } if(pb==NULL) pb=Pb->next; pa=pa->next; } return Pc;}void Output(LinkList &P){ LinkList p; int flag=0; p=P->next; if(p==NULL) printf("0 0"); else { while(p!=NULL) { if(p->data.coef!=0) { if(!flag) printf("%d %d",p->data.coef,p->data.expn); else printf(" %d %d",p->data.coef,p->data.expn); flag++; } p=p->next; } } printf("\n");}int main(){ int n,m; LinkList Pa,Pb,Pc,Pd; Pc=(LNode *)malloc(sizeof(LNode )); if(!Pc) exit(OVERFLOW); Pc->next=NULL; Pd=(LNode *)malloc(sizeof(LNode )); if(!Pd) exit(OVERFLOW); Pd->next=NULL; scanf("%d",&n); Pa=CreatPolyn(Pa,n);//创建乘积链表 scanf("%d",&m); Pb=CreatPolyn(Pb,m); Pd=MulPoly(Pa,Pb); Pc=AddPoly(Pa,Pb); Output(Pd); Output(Pc);}
阅读全文
0 0
- 数据结构---多项式的乘积与和(PTA)
- <PTA>一元多项式的求和和乘积运算解题报告
- [数据结构]-- PTA一元多项式的乘法与加法运算
- [数据结构]-- PTA一元多项式的乘法与加法运算
- 一元多项式的乘积与和
- 链表计算多项式的和,乘积
- [PTA] 线性结构2 一元多项式的乘法与加法运算(20 分)
- PTA 一元多项式的乘法与加法运算
- PTA 一元多项式的乘法与加法运算
- PTA--一元多项式的乘法与加法运算
- PTA 一元多项式的乘法与加法运算
- PTA一元多项式的乘法与加法运算
- PTA 7-1 一元多项式的乘法与加法运算
- PTA习题 一元多项式的乘法与加法运算
- 多项式乘积(Java)
- PTA:一元多项式的加乘运算
- PTA 数据结构4-2 多项式求值 (15分)
- PTA 线性结构2 一元多项式的乘法与加法运算
- 归并排序求逆序对
- 金融术语
- 【Mail】telnet收发邮件过程
- http状态码
- HDPCD-Java-复习笔记(9)-lab
- 数据结构---多项式的乘积与和(PTA)
- vivado xilinx 网盘资料
- Linux IPC 2之管道
- 我理解的Handler,messageQueue,Looper,Messager,HandlerThread.
- Go Get安装一些第三方库-网络问题
- 用Qt实现基于网络请求的用户登录(二)
- 大数据Sqoop_09
- 0x5f3759df的数学原理 ----一种快速开方根求倒原理
- JS阻止事件冒泡兼容各浏览器