多项式乘法程序

文章目录

  • 多项式乘法程序
    • 代码思路
    • 完整代码
    • 运行截图

一个学期才4个实验,太少了吧,边打炉石边写程序花了三四天把四个实验水完了,代码放上供大家参考

由于全程使用的C语言,加上写的很随意,代码优化的空间很大,有很多冗余的代码,只不过写完了就当交差了

实验题目:多项式乘法问题
实验目的:设计一个一元稀疏多项式简单计算器。实验内容与要求 一元稀疏多项式简单计算器的基本功能是:
1.输入并建立多项式;

  • 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列。
  • 多项式a与多项式b相乘,建立多项式。

代码思路

  • 使用链表存多项式
  • 每一个参数链表后的位置后插入

完整代码

#include "stdio.h"
#include "stdlib.h"
#define N 1000
typedef struct muls
{int val[N];int idx[N];int ne[N];int head;int cnt;
}mul;
mul *eq1;
mul *eq2;
mul *res;
void get_mul(mul *v,int n);
void read();
void  times(mul *x,mul *y);
void insert_k(mul *m,int v,int i,int k);
void insert(mul *m,int v,int  i);
void init();
int main()
{init();read();
}
void init()
{eq1= (mul *)(malloc(sizeof(mul)));eq2=(mul  *)(malloc(sizeof (mul)));res=(mul *)(malloc(sizeof (mul)));eq1->cnt=0;eq1->head=-1;eq2->cnt=0;eq2->head=-1;res->cnt=0;res->head=-1;
}
void read()
{printf("欢迎使用一元多项式简易计算器\n");printf("输入格式为系数 指数 (回车键结束)\n");printf("下面请输入第一个多项式:\n");printf("你输入的多项式项数为:\n");int n=0;scanf("%d",&n);get_mul(eq1,n);printf("输入第二个多项式:\n");printf("你输入的多项式项数为:\n");scanf("%d",&n);get_mul(eq2,n);printf("计算结果如下:\n");times(eq1,eq2);int t=res->head;while(t!=-1){printf("%d %d\n",res->val[t],res->idx[t]);t=res->ne[t];}
}
void  times(mul *x,mul *y)
{int x_t=x->head;while(x_t!=-1){int x_val=x->val[x_t];int x_idx=x->idx[x_t];x_t=x->ne[x_t];int y_t=y->head;while(y_t!=-1){int y_val=y->val[y_t];int y_idx=y->idx[y_t];int res_val=x_val*y_val;int res_idx=x_idx+y_idx;y_t=y->ne[y_t];insert(res,res_val,res_idx);}}
}
void get_mul(mul *v,int n)
{while(n--){int a, b;scanf("%d %d",&a,&b);insert(v,a,b);}
}
void Head(mul *m,int v,int i)
{int c=m->cnt;m->val[c]=v;m->idx[c]=i;m->ne[c]=m->head;m->head=m->cnt++;
}
int search(mul *m,int v,int i)
{int t=m->head;while(t!=-1) {if (m->idx[t] == i) {m->val[t] += v;return 1;}t = m->ne[t];}return 0;
}
void insert(mul *m,int v,int  i)
{if(search(m,v,i)==0){int t=m->head;if(m->idx[t]<i){Head(m, v, i);return;}while(t!=-1){int la=t;t = m->ne[t];if(m->idx[t]<i){insert_k(m,v,i,la);return;}}insert_k(m,v,i,t);return;}
}
void insert_k(mul *m,int v,int i,int k)
{m->cnt++;int c=m->cnt;int x=m->ne[k];m->ne[k]=c;m->val[c]=v;m->idx[c]=i;m->ne[c]=x;
}

运行截图

数据结构与算法实验01-使用链表实现多项式乘法相关推荐

  1. c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc

    数据结构与算法实验-利用栈逆置队列元素 利用栈逆置队列元素实验报告 通信1204班 谢崇赟 实验名称 利用堆栈将队列中的元素逆置 实验目的 会定义顺序栈和链栈的结点类型. 掌握栈的插入和删除结点在操作 ...

  2. 数据结构与算法(C++)– 链表(Link)

    数据结构与算法(C++)– 链表(Link) 1.基础知识 表:把具有相同类型的序列 A0, A1, A2, - An 称为表 .n 是表的大小,n=0 称为空表. A0没有前驱,An没有后继. 前驱 ...

  3. 数据结构与算法之反转单向链表和双向链表

    数据结构与算法之反转单向链表和双向链表 目录 反转单向链表和双向链表 1. 反转单向链表和双向链表 题目描述 代码实现 public class Code_ReverseList {public st ...

  4. 数据结构与算法实验题 4.2 Who is the strongest

    数据结构与算法实验题 4.2 Who is the strongest ★实验任务 在神奇的魔法世界,召唤师召唤了一群的魁偶.这些魁偶排成一排,每个魁偶都有一个 战斗值.现在该召唤师有一个技能,该技能 ...

  5. 数据结构与算法之线性结构链表

    数据结构与算法之线性结构链表 这一篇文章主要介绍的是通过java实现单链表.循环链表和双向循环链表,仅供自己复习使用,如有什么不足之处,欢迎指出. 单链表: package xianxingjiego ...

  6. 数据结构与算法实验题 6.1 鼹鼠掘土挑战赛

    数据结构与算法实验题 6..1 鼹鼠掘土挑战赛 ★实验任务 在潘多拉星的哈利路亚山上,生活着许多鼹鼠矿工,它们同属于潘多拉矿业公司哈利路 亚分公司.尽管在潘多拉星最美丽壮阔的地方工作,是一件十分让普通 ...

  7. C语言链表求解多项式乘法问题

    C语言链表求解多项式乘法问题 解决多项式乘法问题最容易想到的就是将乘法运算转换为加法运算.从p1的第一项开始,依此乘以p2的每一项,合并同类项后放入结果多项式中.然而项数太多时,合并同类项的过程过于复 ...

  8. 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)

    一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...

  9. python中的列表是采用链式结构实现的_Python数据结构与算法之列表(链表,linked list)简单实现...

    Python数据结构与算法之列表(链表,linked list)简单实现 Python 中的 list 并不是我们传统(计算机科学)意义上的列表,这也是其 append 操作会比 insert 操作效 ...

  10. 【数据结构与算法】数组与链表

    数组的定义和特性 数组(Array)是一种线性表数据结构.它用一组连续的内存空间,来存储一组具有相同类型的数据. 线性表(Linear List):数组.链表.队列.栈 非线性表:树 图 连续的内存空 ...

最新文章

  1. mongodb java 日志分析_记一次log4j与mongodb集成引发的问题分析
  2. linux expect日期加减,如何“输出”出命令“日期”? (linux/expect/sftp)
  3. Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)
  4. env: zh_CN.GB2312:: No such file or directory
  5. redis List的用途及常用命令
  6. Stanley-系列三
  7. ELK下logstash收集java日志,多行合并成一行
  8. # 国王游戏(贪心+大数乘除+微扰法证明)
  9. centos7 配置anaconda及anaconda常用命令
  10. 【转】使用Python的Requests库进行web接口测试
  11. Proteus安装图文教程
  12. 领英宣布开源数据挖掘软件WhereHows
  13. LCD 12864B V2.0的使用
  14. 地图坐标转换(84坐标、百度坐标、国测局坐标)
  15. 正方教务系统成绩爬虫的实现
  16. Tableau 读书笔记
  17. onkeypress、onkeydown、onkeyup
  18. 单片机毕设选题 stm32便携用电功率统计系统 - 物联网 嵌入式
  19. 安装 Xcode_8.1.xip(踩坑)
  20. 【免费】中国省级行政单位ISO 3166-2对照表

热门文章

  1. Python学习随笔:PyCharm的错误检测使用及调整配置减少错误数量
  2. c语言打印七芒星图形代码,强强纯爱文,看过《C语言修仙》《七芒星》也别错过《狼行成双》...
  3. 前端程序员应该理解的reduce方法,对你的js能力很有帮助
  4. 10 05 05 繁杂
  5. 老九学堂 学习 C++ 第四天
  6. E3亮点:StudioMDHR的《茶杯头》
  7. Classification-Driven Dynamic Image Enhancement
  8. 英国“脱欧”促中国企业调整在欧战略
  9. 制作简单的android小应用,安卓 Android之开发简单小应用(一)
  10. PV(访问量)、UV(独立访客)、IP(独立IP)