7-1(链表) 一元多项式的乘法与加法运算(20 point(s))
来源:互联网 发布:淘宝宝贝分类模板 编辑:程序博客网 时间:2024/06/16 08:03
既然说让用链表做,那就用链表做╭(╯^╰)╮
加法是归并算法
乘法是第一个式子的每一项和第二个的整串相加
挺恶心的代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;typedef struct node{ int value,mi; node *next;}*LinkList,node;void InitList(LinkList &L){ L = new node; L->mi = -1; L->value = -1; L -> next = NULL;}int n,x,y;void Input(LinkList &h1, LinkList &h2){ LinkList l1 = h1; LinkList l2 = h2; scanf("%d",&n); for(int i =0 ; i < n ; i ++){ scanf("%d%d",&x,&y); node *no; no = new node; no->value = x; no->mi = y; no->next = NULL; l1->next = no; l1 = l1->next; } scanf("%d",&n); for(int i =0 ;i < n ; i++){ scanf("%d%d",&x,&y); node *no; no = new node; no->value = x; no->mi = y; no->next = NULL; l2->next = no; l2 = l2->next; }}LinkList add_list(LinkList h1, LinkList h2){ LinkList r1 = h1; LinkList r2 = h2; LinkList l3;InitList(l3); LinkList h3 = l3; if(h1->next == NULL){ return r2; }if(h2->next == NULL){ return r1; } r1 = r1->next;r2 = r2->next; while(r1 != NULL && r2 != NULL){ if(r1->mi > r2->mi){ l3->next = r1; l3 = l3->next; r1 = r1->next; }else if(r1->mi < r2->mi){ l3->next = r2; l3 = l3->next; r2 = r2->next; }else{ node *tmp = new node; tmp->mi = r1->mi; tmp->value = r1->value + r2->value; if(tmp->value == 0){ r1 = r1->next; r2 = r2->next; }else{ r1 = r1->next; r2 = r2->next; l3->next = tmp; l3 = l3->next; } } } if(r1 != NULL){ while(r1 != NULL){ l3 -> next = r1; l3 = l3->next; r1 = r1->next; } } if(r2 != NULL){ while(r2 != NULL){ l3 -> next = r2; l3 = l3->next; r2 = r2->next; } } return h3;}LinkList multi_list(LinkList h1, LinkList h2){ LinkList l3; InitList(l3); LinkList l1 = h1; l1 = l1->next; while(l1 != NULL){ LinkList l4; InitList(l4); LinkList h4 = l4; LinkList l2 = h2; l2 = l2->next; while(l2 != NULL){ node* no; no = new node; no->mi = l1->mi+l2->mi; no->value = l1->value * l2->value; l4->next = no; l4 = l4->next; l2 = l2->next; } l4->next = NULL; l1 = l1 -> next ; LinkList hh4 = h4; l3 = add_list(l3,hh4); } return l3;}void Output(LinkList h){ h = h->next; if(h == NULL){ printf("0 0"); } else{ int cnt = 0; while(h != NULL){ if(!cnt){ cout<<h->value<<" "<<h->mi; } else{ cout<<" "<<h->value<<" "<<h->mi; } cnt++; h = h->next; } }}int main(){ LinkList h1,h2; InitList(h1); InitList(h2); Input(h1,h2); LinkList h4 = multi_list(h1,h2); LinkList h3 = add_list(h1,h2); Output(h4); printf("\n"); Output(h3); return 0;}
不努力只能看别人的脸色
阅读全文
0 0
- 7-1(链表) 一元多项式的乘法与加法运算(20 point(s))
- 7-1 一元多项式的乘法与加法运算(20 point(s))
- PTA 7-1 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算(20 分)
- 一元多项式的乘法与加法运算(20 分)
- 一元多项式的乘法与加法运算(20 分)
- 一元多项式的乘法与加法运算(20 分)
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的加法与乘法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 链表_一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算 (模拟)
- Yii2框架数据库增删改查小结
- 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值),学号用字符串表示,输入的时候要以学号乱序的方式存入Map集合,然后按照学号从大到小的顺序将Map集合中的元素输出打印。需要自定义Ma
- 如何在Fragment中获取context
- 串口、COM口、TTL、RS-232的区别
- centos中Docker的启动以及配置阿里docker镜像库
- 7-1(链表) 一元多项式的乘法与加法运算(20 point(s))
- 计算机网络实训练习
- 学习Linux命令
- Java创建项目的初步过程
- cursor的使用
- jvm探秘四:class类文件结构
- Unity Shader入门精要 阅读笔记四
- Linux日志文件系统(EXT4、XFS、JFS)及性能分析
- C#初识10 字符串1