数据结构实验一元稀疏多项式

一元稀疏多项式计算器实验报告 一元稀疏多项式计算器实验报告 课程名称:数据结构 实验名称: 一元稀疏多项式计算器 学 院:钱学森学院 实 验 日 期 2020年 05 月 08日 姓名:孙昊咸 班级:计试91 学号:2196113485 诚信承诺:我保证本实验报告中的程序和本实验报告是我自己编写,没有抄袭。 一、实验目的 熟悉课堂上讲过的一元多项式加法数据结构(使用链表) 加强C++的基本操作以及STL的使用 深入理解类封装,抽象的意义,并在实践中使用 ## 二、实验环境 阅读详情

算法实现

该程序共包含了一个接口、一个类和一个主类。Listter接口定义了顺序表中的方法名称。在类ArrayList中继承了该接口并实现了每一个方法。在Text类中实现一元稀疏多项式相加的方法,在主函数中构建实现多项式计算的过程。在完善创建多项式、加、减和乘的方法,最后在改写toString方法实现输出。

源码如下

import java.util.Scanner;

public class Test {
    static ArrayList<Integer> CalculationA;
    static ArrayList<Integer> CalculationB;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        CalculationA = new ArrayList<Integer>();
        CalculationB = new ArrayList<Integer>();
        init();
        System.out.print("输入一元多项式A");
        String A = in.next();
        System.out.print("输入一元多项式B");
        String B = in.next();
        transformationA(A);//将A式子存储到顺序表
        transformationB(B);//将B式子存储到顺序表
        System.out.println(add());
        System.out.println(subtract());
        System.out.println(multiplicate());
    }

    private static void init() {
        for (int i = 0; i < 1000; i++) {
            CalculationA.add(0);
            CalculationB.add(0);
        }
    }

    private static void transformationA(String a) {
        a = a.replaceAll("-", "+-");
        String []s1 = a.split("[+]");
        for (int i = 0; i < s1.length; i++) {
            String temp = s1[i];
            if (temp.equals("")) continue;
            String []s2 = temp.split("\\^");
            String []s3 = temp.split("x");
            int index = Integer.parseInt(s2[1]);
            int number = Integer.parseInt(s3[0]);
            CalculationA.set(index, number + CalculationA.get(index));
        }
    }

    private static void transformationB(String a) {
        a = a.replaceAll("-", "+-");
        String []s1 = a.split("[+]");
        for (int i = 0; i < s1.length; i++) {
            String temp = s1[i];
            if (temp.equals("")) continue;
            String []s2 = temp.split("\\^");
            String []s3 = temp.split("x");
            int index = Integer.parseInt(s2[1]);
            int number = Integer.parseInt(s3[0]);
            CalculationB.set(index, number + CalculationB.get(index));
        }

    }

    public static String add() {
        StringBuilder ans = new StringBuilder();
        for (int i = 0; i < 1000; i++) {
            if (CalculationA.get(i) != 0 || CalculationB.get(i) != 0) {
                int temp = CalculationA.get(i) + CalculationB.get(i);
                if (temp != 0) {
                    if (temp < 0) {
                        ans.append(temp + "x^" + i);
                    }else {
                        ans.append("+" + temp + "x^" + i);
                    }

                }

            }
        }
        System.out.println("该两个式子相加:");
        return ans.toString();
    }

    public static String subtract() {
        StringBuilder ans = new StringBuilder();
        for (int i = 0; i < 1000; i++) {
            if (CalculationA.get(i) != 0 || CalculationB.get(i) != 0) {
                int temp = CalculationA.get(i) - CalculationB.get(i);
                if (temp != 0) {
                    if (temp < 0) {
                        ans.append(temp + "x^" + i);
                    }else {
                        ans.append("+" + temp + "x^" + i);
                    }
                }

            }
        }
        System.out.println("该两个式子相减:");
        return ans.toString();
    }

    public static String multiplicate() {
        ArrayList<Integer> temp = new ArrayList<Integer>();
        for (int i = 0; i < 2000; i++) {
            temp.add(0);
        }
        for (int i = 0; i < 1000; i++) {
            for (int j = 0; j < 1000; j++) {
                int x1 = CalculationA.get(i);
                int x2 = CalculationB.get(j);
                int num = x1*x2;
                    int index = i + j;
                    temp.set(index, temp.get(index) + num);
                    if (num != 0) {
                }
            }
        }
        StringBuilder ans = new StringBuilder();
        for (int i = 0; i < 2000; i++) {
            if (temp.get(i) != 0) {
                if (temp.get(i) > 0) {
                    ans.append("+" + temp.get(i) + "x^" + i);
                }else {
                    ans.append(temp.get(i) + "x^" + i);
                }
            }
        }
        System.out.println("该两个式子相乘:");
        return ans.toString();
    }

}
import java.util.Comparator;

public class ArrayList<E> {

    //设置线性表的默认容量
    private static int DEFAULT_CAPACITY = 10;
    private E[] data;
    private int size;

    public ArrayList() {
        this(DEFAULT_CAPACITY);
    }

    public ArrayList(int capacity) {
        if (capacity < 0) {
            throw new IllegalArgumentException("位置不合法");
        }
        data = (E[])new Object[capacity];
        size = 0;
    }

    public void add(E element) {
        add(size ,element);
    }

    public void add(int index, E element) {
        if (index < 0 || index > size) {
            throw new IndexOutOfBoundsException("位置不合法");
        }
        if (size == data.length) {
            resize (data.length*2);
        }
        for (int i = size - 1; i >= index ;i++) {
            data[i+1] = data[i];
        }
        data[index] = element;
        size++;
    }

    private void resize(int newLength) {
        E[] newData = (E[])new Object[newLength];
        for (int i = 0;i < data.length;i++) {
            newData[i] = data[i];
        }
        data = newData;
    }

    public void remove(E element) {
        int index = indexOf(element);
        if (index != -1) {
            remove(index);
        }
    }

    public E remove(int index) {
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException("位置不合法");
        }
        E ret = data[index];
        for (int i = index + 1;i<size;i++) {
            data[i-1] = data[i];
        }
        size--;
        if (size == data.length / 4 && data.length > DEFAULT_CAPACITY) {
            resize (data.length / 2);
        }
        return ret;
    }

    public E get(int index) {
        if (index < 0 || index >=size) {
            throw new IndexOutOfBoundsException("角标不合法");
        }
        return data[index];
    }

    public E set(int index, E element) {
        if (index < 0 || index >=size) {
            throw new IndexOutOfBoundsException("角标不合法");
        }
        E ret = data[index];
        data[index] = element;
        return ret;
    }

    public int size() {
        return size;
    }

    public int indexOf(E element) {
        for (int i = 0;i < data.length ;i++) {
            if (data[i].equals(element)) {
                return i;
            }
        }
        return -1;
    }

    public boolean contains(E element) {
        return indexOf(element) != -1;
    }

    public boolean isEmpty() {
        return size == 0;
    }

    public void clear() {
        data = (E[]) new Object[DEFAULT_CAPACITY];
        size = 0;
    }

    public void sort(Comparator<E> c) {
        if (c == null) {
            throw new IllegalArgumentException("角标不合发");
        }
        int j = 0;
        E e = null;
        //O(n)
        for (int i = 1; i < size; i++) {
            e = data[i];
            for(j = i; j > 0 && c.compare(data[j - 1], e) > 0; j--) {
                data[j] = data[j - 1];
            }
            data[j] = e;
        }
    }
}

一元稀疏多项式(加减法) 这是我们的数据结构的一个实验,用链表实现一元稀疏多项式的加减法,我写的是一个无排序的。 基本思路是创建一个结构体节点,储存每一项的系数(float),指数(int),和一个next指针。输入两个链表A和B后: 1.当指数相等时,系数相加(减法时则相减);相加完的系数若不为0,则存进链表C; 2.若指数不相等,若A的指数小于B的,将A的节点里的系数,指数都存进链表C; 3.反之,则将B的节点 阅读详情

相关推荐

一元稀疏多项式计算器的设计与实现

一元稀疏多项式是由若干非零项组成的多项式,其中“稀疏”一词描述了大部分系数为零的特性。在实际应用中,一元稀疏多项式可表示为一个有序的非零系数序列,这样的特性使得它非常适合处理高次多项式的场景。在计算机科学中,稀疏表是一种数据结构,用于有效存储和处理数据中的“稀疏性”,即大部分数据为零或空白的状态。稀疏表结构特别适用于处理稀疏矩阵、稀疏多项式等数据。由于大量数据元素的值为零或默认值,传统的线性结构如数组和链表在存储和处理时会造成大量的空间和时间浪费。

weixin_35516273的博客 1064

【数据结构】线性表的应用:稀疏一元多项式运算器

使用所学线性表知识构建一元多项式数据结构,并且实现创建、显示、求和、微分和不定积分等功能

standingflower的博客 2618

一元稀疏多项式 数据结构 C++

数据结构链表的使用实例,C++编写,实现一元多项式的加减法。

数据结构——c语言 一元稀疏多项式

设计并验证以下算法:一元稀疏多项式计算器。 (1)设Pn(x)和Qm(x)分别为两个-元稀疏多项式,利用单链表存储Pn(x)和Qm(x)。 (2)从键盘输入一元多项式的信息,建立一元稀疏多项式Pn(x)和Qm(x),并输出。 (3)实现Pn(x)和Qm(x)相加,并输出两者的和Pn(x)+Qm(x)。 (4)实现Pn(x)和Qm(x)相减,并输出两者的差Pn(x)-Qm(x)。 (5)就地逆置两者的差Pn(x)-Qm(x)。 直接上代码: #include <stdio.h...

起当风萧的博客 5159

数据结构:一元稀疏多项式计算器(含图形界面)

设计一个C++模板类Polynomial,其中T给出了系数的类型。类Polynomial应该带有一个私有成员degree,它是多项式的阶数。当然,它还可能包含其他的私有成员。多项式类应支持以下操作: (1) Polynomial()——创建一个0阶多项式。这个多项式的阶数为0,不包含任何项。它是类的构造函数。 (2) Degree()——返回多项式的阶数。 (3) Input()——读入一个多项式。可以假定输入是由多项式的阶数和一个系数表构成,系数表中的系数按指数递增的次序排列。 (4) Output()——输出多项式。输出格式可以与输入格式相同或为类数学表达式。 (5) Add(b)()——把当前多项式加到多项式b上,并返回所得结果, (6) Substract(b)——减去多项式b并返回所得结果。 (7) Multiply(b)——乘以多项式b并返回所得结果。 (8) Divide(b)——除以多项式b并返回所得结果。 (9) Value(x)——返回按x计算出的多项式的值。 对于(3)至(9),需要重载操作符<> 、+ 、- 、 * 、/ 、和()。对于(9),语法应返回多项式在x点的取值,其中P的类型为Polynomial。采用适当的多项式测试一元稀疏多项式简单计算器的基本功能。

数据结构课程设计_一元稀疏多项式计算器,超详细!

数据结构课程设计,一元稀疏多项式计算器,有截图、实验报告!超详细!

数据结构实验-稀疏一元多项式计算

(实验)自行为稀疏一元多项式设计存储结构,并实现如下功能: ① 输入:从键盘输入多项式的各项系数和指数,创建一元多项式; ② 输出:按给定格式输出一元多项式;(例如:3*x20-x7+10) ③ 多项式加法: 任意输入另一个多项式,输出其与原多项式的和。 ④ 多项式减法: 任意输入另一个多项式,将其作为减数输出其与原多项式的差。 ⑤ 多项式乘法: 任意输入另一个多项式,输出其与原多项式的积。 #include <iostream> using namespace std; typedef str

低调的骏马 2468

一元稀疏多项式的加法运算

在C语言环境下一元稀疏多项式的加法运算,附上详尽代码,可直接复制。

C++实现一个一元稀疏多项式简单计算器 数据结构

C++实现一个一元稀疏多项式简单计算器 数据结构,以类数学表达式的形式输出多项式:这里要注意输出形式,遇到常数项时不能输出x,第一项不能输出+号,系数值为1的非零次项的输出形式中略去系数1。...

qq_52788258的博客 4543

一元稀疏多项式的加减(链表数据结构)

一元稀疏多项式的加减的实现,链表数据结构创建,按指数递增输出,输入不按顺序

在Ubuntu 18下安装SIMULIA Abaqus 2020

参考资料: https://github.com/imirzov/Install-Abaqus-2019-on-Ubuntu-18.04-LTS 安装环境: Ubuntu 18.4 LTS 软件版本: SIMULIA for Linux 2020 1 准备 安装光盘及破解文件 解压光盘至一目录,不能挂载,因为要修改文件内容 /home/sunwk/Downloads/abaqus2020 更改文件权限为最大 sudo chmod -R 777 abaqus2020/ * 复制libpng12

oak619的博客 1万+

【数据结构】一元稀疏多项式

【代码】【数据结构】一元稀疏多项式。

aaa_zhong的博客 210

pentaho-kettle依赖拉取失败?试试这个Maven仓库配置的终极解决方案

本文详细解析了Pentaho Kettle依赖拉取失败的常见原因,并提供了三种Maven仓库配置方案,包括基础pom.xml配置、全局settings.xml设置以及企业级私有镜像仓库搭建。通过实战验证的方法和常见问题排查指南,帮助开发者彻底解决pentaho-kettle依赖问题,提升项目构建效率。

weixin_30275415的博客 202

数据结构实验:一元稀疏多项式(计算器)

实验内容: 设有一元多项式Am(x)和Bn(X),编程实现多项式Am(x)和Bn(x)的加法、减法和乘法运算。其中多项式描述为: Am(x)=A0+A1x1+A2x2+A3x3+….+Amxm; Bn(x)=B0+B1x1+B2x2+B3x3+….+Bnxn。 说明: 1、从键盘输入两个多项式的系数和指数 2、可以进行多项式的加减乘三中运算 3、每种运算结果以多项式形式输出,可以输出升幂和降幂两种情况 4、使用合适的存储结构(顺序存储和链式存储) #include<stdio.h> #incl

清风无虑skr的博客 3122

OPC UA 协议详解

OPC UA(统一架构)是新一代工业自动化标准通信协议,替代传统OPC Classic,具有跨平台、高安全性、标准化等优势。基于TCP协议,支持全平台部署,采用面向对象架构组织数据,提供实时读写、事件订阅、历史数据访问等功能。作为工业4.0核心协议,适用于智能制造、数字孪生等场景,能实现多品牌设备统一接入。相比Modbus和MQTT,OPC UA协议更规范安全但复杂度较高,是大型工业集群互联的主流选择。

eastyuxiao的专栏 723

Materials Studio与LAMMPS联合作战:如何用msi2lmp.exe完美转换聚合物模型(含PCFF力场配置)

本文详细解析了如何利用msi2lmp.exe工具将Materials Studio中的聚合物模型高效、准确地转换为LAMMPS可识别的data文件,并重点配置PCFF力场。文章提供了从MS模型构建、文件导出到命令行转换、参数调整及转换后验证的全流程实战指南与避坑技巧,旨在帮助研究者解决模型转换中的常见问题,实现跨平台分子动力学模拟的无缝衔接。

weixin_29228781的博客 519

一元稀疏多项式计算器:一次数据结构实验的题目

据说今天要交这个变态的作业,所以,我赶了一夜写了这么个小程序,可是今天拿到了学校老师却说今天不上课,害的我困的差点撞车。唉,多少也是写完了一点东西,传上来大家看看吧。输入一个一元多项式,例如:-23x^9+54x^8+22x^9等等,把指数相同的项目合并,并且按照指数大小排列输出字符串。差不多了吧。老师要求使用线性表来操作,我也就按要求做了。源代码含有四个文件,datastruct.h是数据结构的

河边的小屋 6309

基于Simulink的轨道交通信号控制系统仿真详细介绍

轨道交通信号控制系统是确保列车安全、高效运行的核心技术。通过Simulink进行信号控制系统的仿真,可以验证系统的设计、优化调度策略并提高安全性。以下是如何在MATLAB和Simulink中设计并仿真一个轨道交通信号控制系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的轨道交通信号控制系统仿真。该系统能够根据列车位置、速度和轨道状态生成控制指令,确保列车的安全、高效运行。通过虚拟场景仿真、硬件在环测试和实机测试,验证了系统的性能,并通过参数优化进一步提升了系统的可靠性。引入智能调度。

xiaoheshang_123的博客 461

数据结构-实验3 一元稀疏多项式计算器

【问题描述】 设计一个一元稀疏多项式简单计算器。 【基本要求】 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci 和 ei 分别是第 i 项的系数和指数,序列按指数降序排列; (3)实现多项式相加:C=A+B; (4)实现多项式相减:C=A-B。 代码实现: #includ...

weixin_43488714的博客 2098

YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 2186

RK3588 ENV 环境配置之 fw_printenv

RK3588 ENV环境配置指南 本文详细介绍了在RK3588平台上配置ENV环境变量的完整流程。首先需要在parameter分区表中划分env分区,然后在U-Boot中配置MMC偏移地址。接着编译fw_printenv工具并部署到目标设备,配置fw_env.config文件指定存储位置。重点解决了内核中读写ENV时遇到的CRC校验问题,通过U-Boot的saveenv命令初始化环境变量存储区域。最后展示了如何使用fw_printenv/fw_setenv工具在内核中读写ENV变量,并建议将配置集成到根文件

501846585_QQAndroid_java 1031

一元稀疏多项式计算 (数据结构实验)

#include &lt;bits/stdc++.h&gt; using namespace std; struct node{ float coef;//系数 int exp;//指数 node * next; }; node * creat(node * l) { float coef; int exp; l = new node; node * p,* q; scan...

恒持此志成永志 3804

多后端系统统一聚合与智能分流:用 Multi Origin Composition 与 Routing 打造一套可扩展的 SAP Gateway 架构

本文针对企业级SAP集成场景,详细介绍了如何利用SAP Gateway的MOC(多源组合)和Routing功能实现多后端系统的智能路由与数据聚合。通过系统别名配置、用户角色绑定和主机名分流等机制,可实现按用户、按域名的精确路由。文章还提供了配置清单、性能优化建议和常见问题解决方案,帮助工程师落地多后端OData服务的最佳实践。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 185

数据结构 实验三:(线性表实验-链式存储)一元稀疏多项式简单计算器

一、实验目的 通过本实验的学习,掌握带表头结点的单链表基本操作的实现,为灵活运用线性表奠定基础。 二、实验内容 【问题描述】 设计一个一元稀疏多项式简单计算器。 【基本要求】 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排列; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b。 【测试数据】 (

m0_47161653的博客 2491

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数据结构 实验三:(线性表实验-链式存储)一元稀疏多项式简单计算器 代码部分

数据结构 实验三:(线性表实验-链式存储)一元稀疏多项式简单计算器 代码部分 一个一元稀疏多项式简单计算器 代码 /* 时间:2021/03/25 作者:瑞雪流年 功能:1.输入并建立多项式; 2.(2)输出多项式, 输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数, ci,ei分别是第i项的系数和指数,序列按指数降序排列; 3.多项式a和b相加,建立多项式a+b; 4.(4)多项式a和b相减,建立多项式a-b。

m0_47161653的博客 2707

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

多项式相加减【数据结构实验报告】

注意: Code: //head file: "Poly.h" #ifndef POLY_H_INCLUDED #define POLY_H_INCLUDED struct Polynode{ double cof; int exp; struct Polynode* next; }; typedef struct Polynode* plist;

_ 6213

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 2021天梯赛 L2-1 包装机(JAVA)
下一篇: 数据结构实验哈夫曼编码
java洲
博客等级 码龄6年 5粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值