***************************

本文作者科大MF22某班Noah懒羊羊同学,为大家提供一个作业思路,请勿直接copy!!!一起进步学习~

*****************************

目录

1.问题的描述

1.1基本功能

1.2健壮性

1.3 规范性

2.算法的描述

2.1数据结构的描述

2.2程序结构的描述

3.调试分析

4.算法的时空分析

5.测试结果及分析

6.实验体会和收获

代码

Noah_exp1.h

Main.cpp


1.问题的描述

1.1基本功能

  1. 使用所学线性表知识构建一元多项式数据结构,并且实现创建、显示、求和、微分和不定积分等功能。
  2. 关于创建和显示功能,输入格式不作要求,输出形式如:X^3–X^2+2X-2。
  3. 关于求和功能,要求按照先使用创建功能创建两个多项式,然后进行求和并输出(屏幕打印),例如输入X3+3X2+2X+6和X3-X2+2X-2,输出为2X3+2X2+4X+4。
  4. 关于微分功能,要求先输入一个多项式,然后对其求N阶微分,例如N=1时:X3+3X2+2X+6→3X2+6X+2,N=2时:X3+3X2+2X+6→6X+6。
  5. 关于求不定积分功能,要求首先输入一个多项式,然后求其不定积分,例如
  6. 此外,要求整个程序需搭建出良好的人机交互模式,有菜单界面和各个功能界面,并且界面切换逻辑要正确。

1.2健壮性

  1. 输入X3-X2+2X-2时,按X3、-X2、+2X、-2顺序输入 和 按-2、X3、-X2、+2X顺序输入时,结果显示的是否相同。
  2. 求和:会把系数为0项消除:(X3+3X2+2X+6) + (X3-3X2+2X+6)=2X3+4X+12。
  3. 微分 N=4  :X3+3X2+2X+6→0。
  4. 菜单界面和各个功能界面切换逻辑正确。

1.3 规范性

  1. 代码注释
  2. 程序模块化
  3. 人机交互友好

2.算法的描述

2.1数据结构的描述

使用单链表结构来存储,结点使用结构体对多项式的每一项进行定义,每个节点中包含三个元素,分别是系数、指数和下一结点指针。数据的逻辑结构如下图所示,

在内存中,结点并不存储在相邻的存储空间,而是通过每个结点中的*next指针来访问下一结点,通过头结点即可找到所有结点。

主要变量说明:

变量

类型

说明

polynomial_Node

结构体

多项式中的单项结点结构体

*polylist

机构体指针

用于访问结构体,存储结构体内存位置

coef

float

polynomial_Node中的元素之一,单项式中的系数

expn

int

polynomial_Node中的元素之一,单项式中的指数

*next

结构体指针

polynomial_Node中的元素之一,用于访问结构体,存储结构体内存位置

pre_node

结构体指针

在多个重要函数中出现,用于构建多项式数据结构时,暂存前一节点的指针

result /  result_return

结构体指针

在多个重要函数中作为参数出现,一般作为函数的出口,存储函数操作后的输出结果

2.2程序结构的描述

程序主要包含noah_exp1.h头文件和main.cpp主文件,其中noah_exp1.h文件为实现多项式数据结构的代码集合,main.cpp中主要实现菜单和功能界面的交互以及头文件中函数的调用。其具体结构如下,

noah_exp1.h中模块具体说明:

(1)typedef struct polynomial_Node{

/***********************

Name: polynomial_Node; *polylist

Description: 多项式结点的结构体定义

Input Parameters: -

Output Parameters: -

Return: -

Supplement: -

***********************/

(2)void Creatpolyn(polylist &poly, int listsize){

/***********************

Name: Creatpolyn()

Description: 输入listsize+1项的系数和指数,建立表示多项式的有序链表

Input Parameters: -poly, 所需初始化的链表的第一个结点(该数据结构中无头结点)

-listsize,所需初始化的链表的长度

Output Parameters: -poly,引用参数,作为出口保存了初始化后的链表的头结点

Return: -

Supplement: -该链表没有头结点

***********************/

(3)int get_polylen(polylist p){

/***********************

Name: get_polylen()

Description: 返回链表的长度(多项式的最高次幂+1)

Input Parameters: -p,所需求长度的链表的第一个结点

Output Parameters: -

Return: -len,int数据类型,为链表的长度

Supplement: -该链表没有头结点

***********************/

(4)void Copy_polylist(polylist original,polylist &result){

/***********************

Name: Copy_polylist()

Description: 链表的克隆,将p链表复制给result链表,两表的内存地址不同

Input Parameters: -original,被复制的链表的第一个结点

-result,克隆后的链表的头结点

Output Parameters: -result,引用参数,作为函数的出口保存了克隆后的链表的第一个结点

Return: -

Supplement: -该链表没有头结点

***********************/

(5)polylist revers_Llist(polylist L){

/***********************

Name: revers_Llist()

Description: 链表逆置,并返回逆置后的第一个结点

Input Parameters: -L,需要逆置的链表的第一个结点

Output Parameters: -

Return: -逆置后的第一个结点

Supplement: -该链表没有头结点

***********************/

(6)void Displaypolynomial(polylist poly){

/***********************

Name: Displaypolynomial()

Description: 以常见的格式打印多项式

Input Parameters: -poly,需要打印的链表的第一个结点

Output Parameters: -

Return: -

Supplement: -该链表没有头结点,因此第一个结点也需要打印,

输出第一项时如果系数为正则不需要输出加号,如果是常数项则不输出X,如果幂为1则不显示次幂,

系数不等于0,指数等于0时不显示X^n,

系数不等不等于0,指数等于1时不显示^n,

系数等于0时,省略该项。

***********************/

(7)void addpoly(polylist a, polylist b, polylist &result){

/***********************

Name: addpoly()

Description: 将两个多项式相加并将结果存储在result的链表中

Input Parameters: -a,需要相加的其中一个链表的第一个结点

-b,需要相加的第二个链表的第一个结点

-result,输入的空结点

Output Parameters: -result,作为函数出口,以result为第一个结点的链表保存了相加后的的多项式

Return: -

Supplement: -

***********************/

(8)void differentialpoly(polylist a,int N, polylist &result_return){

/***********************

Name: differentialpoly()

Description: 将多项式微分N阶并将结果存储在result的链表中

Input Parameters: -a,需要进行微分的多项式的第一个结点指针

-result_return,输入的空结点

Output Parameters: -result_return,作为函数出口,以result_return为第一个结点的链表保存了N阶微分后的的多项式

Return: -

Supplement: -参考了递归思路,每次进入函数N-1,当N=0时转向函数出口

***********************/

(9)void indefiniteintegralpoly(polylist a, polylist &result){

/***********************

Name: indefiniteintegralpoly()

Description: 求多项式不定积分并将结果存储在result的链表中

Input Parameters: -a,需要求不定积分的多项式的第一个结点指针

-result,输入的空结点

Output Parameters: -result,作为函数出口,以result为第一个结点的链表保存了求不定积分后的的多项式

Return: -

Supplement: -

***********************/

3.调试分析

调试功能一:Create a polynomial and print it to screen

在进行初始化时首先要输入该多项式的最高次数,然后按照从低次到高次地输入系数。

测试数据选择:

  1. 3- 1.2, 2, 2.2 ,22
  2. 1-1,2
  3. 0-2
  4. 5-0, 1, 1, 0, 1, 1

问题及解决方法:

(1)float精度问题,由于判断系数的大小时(尤其是==判断)需要进行比较,但由于float数据类型的精度有问题因此使用fabs(p->coef-0.000) > FLOAT_PRECISON替代。

(2)其他打印细节问题,例如系数等于0时省略、指数为1时不显示次数,使用不同的判断语句对不同的情况进行处理。

调试功能二:Add 2 polynomial and print result to screen

测试数据选择:

  1. 3- 1.2, 2, 2.2 ,22;1-1,2
  2. 0-2;5-0, 1, 1, 0, 1, 1

问题及解决方法:

调试功能三:Get differential of a polynomial and print result to screen

测试数据选择:

  1. 3- 1.2, 2, 2.2 ,22;1
  2. 3- 1.2, 2, 2.2 ,22;2
  3. 1-1,2;1
  4. 1-1,2;2
  5. 0-2;1
  6. 0-2;2
  7. 5-0, 1, 1, 0, 1, 1;1
  8. 5-0, 1, 1, 0, 1, 1;2

问题及解决方法:

调试功能四:Get indefinite integral of a polynomial and print result to screen

测试数据选择:

  1. 3- 1.2, 2, 2.2 ,22
  2. 1-1,2
  3. 0-2
  4. 5-0, 1, 1, 0, 1, 1

问题及解决方法:

4.算法的时空分析

(1)void Creatpolyn(polylist &poly, int listsize)

时间复杂度:O(n)

空间复杂度:O(n)

(2)int get_polylen(polylist p)

时间复杂度:O(n)

空间复杂度:O(n)

(3)void Copy_polylist(polylist original,polylist &result)

时间复杂度:O(n)

空间复杂度:O(n)

(4)polylist revers_Llist(polylist L)

时间复杂度:O(n)

空间复杂度:O(n)

(5)void Displaypolynomial(polylist poly)

时间复杂度:O(n)

空间复杂度:O(n)

(6)void addpoly(polylist a, polylist b, polylist &result)

时间复杂度:O(n)

空间复杂度:O(n)

(6)void differentialpoly(polylist a,int N, polylist &result_return)

时间复杂度:O(n)

空间复杂度:O(n)

(6)void indefiniteintegralpoly(polylist a, polylist &result)

时间复杂度:O(n)

空间复杂度:O(n)

5.测试结果及分析

测试功能一:Create a polynomial and print it to screen

测试用例

结果

分析

3- 1.2, 2, 2.2 ,22

√,一次项不输出次幂只有

1-0,2

√,常数项为0省略输出

0-2

√,只有一项正常输出

5-0, 1, 1, 0, 1, 1

√,稀疏多项式输出正确

调试功能二:Add 2 polynomial and print result to screen

测试用例

结果

分析

3- 1.2, 2, 2.2 ,22;1-0,2

√,对应次幂相加正确

0-2;5-0, 1, 1, 0, 1, 1

问题及解决方法:

测试功能三:Get differential of a polynomial and print result to screen

测试用例

结果

分析

3- 1.2, 2, 2.2 ,22;1

√,一阶微分正常输出

3- 1.2, 2, 2.2 ,22;2

√,二阶微分正常输出

1-1,2;2

√,微分阶数大于最高次幂输出为0

0-2;3

√,微分阶数大于最高次幂输出为0

调试功能四:Get indefinite integral of a polynomial and print result to scree

测试用例

结果

分析

3- 1.2, 2, 2.2 ,22

1-1,2

5-0, 1, 1, 0, 1, 1

6.实验体会和收获

  1. 学会了灵活运用链表这种数据结构;
  2. 对指针、引用参数、函数返回值的认识更加深刻;
  3. 对递归的思想理解更加深刻,并且能够用于实战;
  4. 学会了如何更快地定位程序BUG并进行调试;
  5. 学会了如何更科学地设计测试用例来对程序进行功能测试。

代码

Noah_exp1.h

/**************************************************************************Copyright Copyright 2022 Noah Zhan.* File Name: noah_exp1.h* Description: 实现一元稀疏多项式数据机构及相关功能** Version: V1.0* Author:   Noah Zhan* Create Time: 2022-10-20**************************************************************************/
#ifndef NOAH_EXP1_H_INCLUDED
#define NOAH_EXP1_H_INCLUDED
#define FLOAT_PRECISON 0.0000001//用于浮点数的大小比较
#include<cmath>//定义多项式结点结构体
typedef struct polynomial_Node{/***********************Name: polynomial_Node; *polylistDescription: 多项式结点的结构体定义Input Parameters: -Output Parameters: -Return: -Supplement: -***********************/float coef;int expn;struct polynomial_Node *next;
}polynomial_Node,*polylist;//初始化多项式
void Creatpolyn(polylist &poly, int listsize){/***********************Name: Creatpolyn()Description: 输入listsize+1项的系数和指数,建立表示多项式的有序链表Input Parameters: -poly, 所需初始化的链表的第一个结点(该数据结构中无头结点)-listsize,所需初始化的链表的长度Output Parameters: -poly,引用参数,作为出口保存了初始化后的链表的头结点Return: -Supplement: -该链表没有头结点***********************/poly = (polylist)malloc(sizeof(polynomial_Node));poly->next = nullptr;printf("Input constant coefficient:(float)");scanf("%f",&poly->coef);poly->expn = 0;//初始化剩下的listsize-1个结点polylist pre_node = poly;for(int i = 1; i<listsize;i++){polylist p = (polylist)malloc(sizeof(polynomial_Node));printf("Input X^%d coefficient:(float)",i);scanf("%f",&p->coef);p->next = nullptr;p->expn = i;pre_node->next = p;pre_node = p;}
}//返回链表的长度(多项式的最高次幂+1)
int get_polylen(polylist p){/***********************Name: get_polylen()Description: 返回链表的长度(多项式的最高次幂+1)Input Parameters: -p,所需求长度的链表的第一个结点Output Parameters: -Return: -len,int数据类型,为链表的长度Supplement: -该链表没有头结点***********************/int len = 1;while(p->next!=nullptr){len++;p = p->next;}return len;
}//链表的克隆,将p链表复制给result链表,两表的内存地址不同
void Copy_polylist(polylist original,polylist &result){/***********************Name: Copy_polylist()Description: 链表的克隆,将p链表复制给result链表,两表的内存地址不同Input Parameters: -original,被复制的链表的第一个结点-result,克隆后的链表的头结点Output Parameters: -result,引用参数,作为函数的出口保存了克隆后的链表的第一个结点Return: -Supplement: -该链表没有头结点***********************///克隆头结点result = (polylist)malloc(sizeof(polynomial_Node));result->coef = original->coef;result->expn = original->expn;result->next = nullptr;polylist pre_node = result;int len = get_polylen(original);//克隆剩下的结点for(int i = 1; i<len;i++){original = original->next;//printf("%f %d %f %d",original->coef,original->expn,original->next->coef,original->next->expn);polylist p = (polylist)malloc(sizeof(polynomial_Node));p->coef = original->coef;p->expn = original->expn;p->next = nullptr;pre_node->next = p;pre_node = p;}
}//链表逆置,并返回逆置后的第一个结点
polylist revers_Llist(polylist L){/***********************Name: revers_Llist()Description: 链表逆置,并返回逆置后的第一个结点Input Parameters: -L,需要逆置的链表的第一个结点Output Parameters: -Return: -逆置后的第一个结点Supplement: -该链表没有头结点***********************/if(L->next==nullptr)//如果长度为1,则不必逆置return L;polylist p = L->next;L->next = nullptr;while(p){polylist temp = p->next;p->next = L;L = p;p = temp;}return L;
}//打印多项式
void Displaypolynomial(polylist poly){/***********************Name: Displaypolynomial()Description: 以常见的格式打印多项式Input Parameters: -poly,需要打印的链表的第一个结点Output Parameters: -Return: -Supplement: -该链表没有头结点,因此第一个结点也需要打印,输出第一项时如果系数为正则不需要输出加号,如果是常数项则不输出X,如果幂为1则不显示次幂,系数不等于0,指数等于0时不显示X^n,系数不等不等于0,指数等于1时不显示^n,系数等于0时,省略该项。***********************/polylist p = poly;//输出第一项(如果系数为正则不需要输出加号,如果是常数项则不输出X,如果幂为1则不显示次幂)if(fabs(p->coef-0.000) > FLOAT_PRECISON && p->expn==0)//系数不等于零,指数等于零时printf("%.2f",p->coef);else if(fabs(p->coef-0.000) > FLOAT_PRECISON && p->expn==1)//系数不等于零,指数等于1时printf("%.2fX",p->coef);else{while(fabs(p->coef-0.000) < FLOAT_PRECISON){//系数等于零时,p = p->nextif(p->next==nullptr){//如果多项式只有一项且系数为0printf("0"); return;}p = p->next;}if(fabs(p->coef-1.000) < FLOAT_PRECISON && p->expn!=0)printf("X^%d",p->expn);else if(fabs(p->coef-(-1.000)) < FLOAT_PRECISON && p->expn!=0)printf("-X^%d",p->expn);elseprintf("%.2fX^%d",p->coef,p->expn);}p = p->next;//输出剩下的项while(p!=nullptr){if(fabs(p->coef-0.000) < FLOAT_PRECISON){//如果系数为0则该项不打印p = p->next;continue;}else if(p->coef<0.000 && p->expn!=0 && p->expn !=1){//系数小于零直接打印,自带减号if(fabs(p->coef-(-1.000)) < FLOAT_PRECISON)//系数为-1printf("-X^%d",p->expn);else//系数不为-1printf("%.2fX^%d",p->coef,p->expn);}else if(p->coef>0.000 && p->expn!=0 && p->expn !=1){ //系数大于零打印时要加“+”if(fabs(p->coef-1.000) < FLOAT_PRECISON)//系数为1printf("+X^%d",p->expn);else//系数不为1printf("+%.2fX^%d",p->coef,p->expn);}else if(p->expn==0){//指数为零的时候不打印X和次幂if(p->coef>0)printf("+%.2f",p->coef);else if(p->coef<0)printf("%.2f",p->coef);}else if(p->expn==1){//指数为1的时候不打印次幂if(p->coef>0){if(fabs(p->coef-1.000) < FLOAT_PRECISON)//系数为1printf("+X");elseprintf("+%.2fX",p->coef);}else if(p->coef<0){if(fabs(p->coef-(-1.000)) < FLOAT_PRECISON)//系数为-1printf("-X");elseprintf("%.2fX",p->coef);}}p = p->next;}
}//两个多项式相加
void addpoly(polylist a, polylist b, polylist &result){/***********************Name: addpoly()Description: 将两个多项式相加并将结果存储在result的链表中Input Parameters: -a,需要相加的其中一个链表的第一个结点-b,需要相加的第二个链表的第一个结点-result,输入的空结点Output Parameters: -result,作为函数出口,以result为第一个结点的链表保存了相加后的的多项式Return: -Supplement: -***********************/result = (polylist)malloc(sizeof(polynomial_Node));polylist pre_node;int head_state = 1;//用于在生成第一个结点时的控制if(a->expn!=0){//当a头结点次幂不为0时进行逆置操作,方便后续相加运算a = revers_Llist(a);}if(b->expn!=0){//当b头结点次幂不为0时进行逆置操作,方便后续相加运算b = revers_Llist(b);}while(a!=nullptr || b!=nullptr){float coef_a,coef_b;//暂存int expn_a,expn_b;//暂存//计算新的coef和exptif(a==nullptr && b != nullptr){coef_a = 0.000;expn_a = 0;}else{coef_a = a->coef;expn_a = a->expn;}if(b==nullptr && a != nullptr){coef_b = 0.000;expn_b = 0;}else{coef_b = b->coef;expn_b = b->expn;}float coef = coef_a + coef_b;int expn = expn_a|expn_b;//如果是头结点if(head_state){result->coef = coef;result->expn = expn;result->next = nullptr;pre_node = result;//printf("%f  %d",result->coef,result->expn);if(a!=nullptr)a = a->next;if(b!=nullptr)b = b->next;head_state = 0;continue;}//如果不是头结点polylist temp = (polylist)malloc(sizeof(polynomial_Node));temp->coef = coef;temp->expn = expn;temp->next = nullptr;pre_node->next = temp;pre_node = temp;if(a!=nullptr)a = a->next;if(b!=nullptr)b = b->next;}result = revers_Llist(result);
}//多项式求N阶微分
void differentialpoly(polylist a,int N, polylist &result_return){/***********************Name: differentialpoly()Description: 将多项式微分N阶并将结果存储在result的链表中Input Parameters: -a,需要进行微分的多项式的第一个结点指针-result_return,输入的空结点Output Parameters: -result_return,作为函数出口,以result_return为第一个结点的链表保存了N阶微分后的的多项式Return: -Supplement: -参考了递归思路,每次进入函数N-1,当N=0时转向函数出口***********************/if(get_polylen(a)<=N){//微分阶数过高时进行控制result_return = (polylist)malloc(sizeof(polynomial_Node));result_return->coef = 0.000;result_return->expn = 0;result_return->next = nullptr;return ;}else if(N>0){//此时还要继续微分polylist result;result = (polylist)malloc(sizeof(polynomial_Node));polylist pre_node;int head_state = 1;//用于在生成第一个结点时的控制while(a!=nullptr){//如果expn为0则这项微分后不存在了,直接跳过这个nodeif(a->expn==0){a = a->next;continue;}//计算微分后新的coef和exptfloat coef = a->coef * a->expn;int expn = a->expn - 1;//如果是头结点if(head_state){result->coef = coef;result->expn = expn;result->next = nullptr;pre_node = result;a = a->next;head_state = 0;continue;}//如果不是头结点polylist temp = (polylist)malloc(sizeof(polynomial_Node));temp->coef = coef;temp->expn = expn;temp->next = nullptr;pre_node->next = temp;pre_node = temp;a = a->next;}differentialpoly(result,N-1,result_return);//进入下一阶微分free(result);//释放内存}else if(N==0)//出口,将最终结果复制给result_returnCopy_polylist(a,result_return);
}//多项式不定积分
void indefiniteintegralpoly(polylist a, polylist &result){/***********************Name: indefiniteintegralpoly()Description: 求多项式不定积分并将结果存储在result的链表中Input Parameters: -a,需要求不定积分的多项式的第一个结点指针-result,输入的空结点Output Parameters: -result,作为函数出口,以result为第一个结点的链表保存了求不定积分后的的多项式Return: -Supplement: -***********************/result = (polylist)malloc(sizeof(polynomial_Node));result->coef=0.000;result ->expn=0;result->next=nullptr;polylist pre_node = result;while(a!=nullptr){polylist temp = (polylist)malloc(sizeof(polynomial_Node));temp->coef = float(a->coef / (float(a->expn) + 1.00));temp->expn = a->expn + 1;temp->next = nullptr;pre_node->next = temp;pre_node = temp;a = a->next;}
}
#endif // NOAH_EXP1_H_INCLUDED

Main.cpp

#include <iostream>
#include "noah_exp1.h"
#include <stdlib.h>
#include <stdio.h>
using namespace std;
void Menue_gui();
void createandprintpoly();
void addandprint();
void differentialandprint();
void integralandprint();int main()
{while(1){Menue_gui();int func;scanf("%d",&func);switch(func){case 0:exit(0);case 1:createandprintpoly();break;case 2:addandprint();break;case 3:differentialandprint();break;case 4:integralandprint();break;default:printf("Input error! Please try again!");}printf("\n");system("pause");}return 0;
}//菜单界面
void Menue_gui(){system("cls");//清屏printf("********************This is Sparse unary polynomial arithmetic unit**************************\n");printf("*********************************************************************************************\n");printf("Menue:\n");printf("\nExit this program------------------------------------------------------0.\n");printf("\nCreate a polynomial and print it to screen-----------------------------1.\n");printf("\nAdd 2 polynomial and print result to screen----------------------------2.\n");printf("\nGet differential of a polynomial and print result to screen------------3.\n");printf("\nGet indefinite integral of a polynomial and print result to screen-----4.\n");printf("\n**********************************************************************************************\n");printf("Choose the function you want to use(input number):\n");
}//功能1界面
void createandprintpoly(){system("cls");//清屏printf("ENTER FUNCTION : Create a polynomial and print it to screen--1.\n");polylist poly_1;printf("Please input highest exponential(integer) and a number series of coefficient to initialize the polynomial.\n");printf("highest exponential:\n");int Initsize;scanf("%d",&Initsize);Initsize=Initsize+1;//printf("The number series of coefficient:(input)\n");Creatpolyn(poly_1,Initsize);printf("Now the polynomial is:\n");//Displaypolynomial(poly_1);//这是从低次幂到高次幂进行打印//将正向链表逆置,得到从高次降到低次的链表polylist poly_1_reverse;Copy_polylist(poly_1,poly_1_reverse);//复制一个原链表到别的内存空间poly_1_reverse = revers_Llist(poly_1_reverse);//逆置Displaypolynomial(poly_1_reverse);
}//功能2界面
void addandprint(){system("cls");//清屏printf("ENTER FUNCTION : Add 2 polynomial and print result to screen----------------------------2.\n");//初始化多项式Aprintf("Initialize polynomial A.\n");polylist poly_2;printf("Please input highest exponential(integer) and a number series of coefficient to initialize the polynomial.\n");printf("highest exponential:\n");int Initsize;scanf("%d",&Initsize);Initsize=Initsize+1;//printf("The number series of coefficient:(input)\n");Creatpolyn(poly_2,Initsize);//初始化多项式Bprintf("Initialize polynomial B.\n");polylist poly_3;printf("Please input highest exponential(integer) and a number series of coefficient to initialize the polynomial.\n");printf("highest exponential:\n");//int Initsize;scanf("%d",&Initsize);Initsize=Initsize+1;//printf("The number series of coefficient:(input)\n");Creatpolyn(poly_3,Initsize);//展示多项式Aprintf("\nNow the polynomial A is:\n");polylist poly_2_reverse;Copy_polylist(poly_2,poly_2_reverse);//复制一个原链表到别的内存空间poly_2_reverse = revers_Llist(poly_2_reverse);//逆置Displaypolynomial(poly_2_reverse);//展示多项式Bprintf("\nNow the polynomial B is:\n");polylist poly_3_reverse;Copy_polylist(poly_3,poly_3_reverse);//复制一个原链表到别的内存空间poly_3_reverse = revers_Llist(poly_3_reverse);//逆置Displaypolynomial(poly_3_reverse);//多项式A\B相加并打印printf("\nAdd A and B, the result is:\n");polylist add_result;addpoly(poly_2_reverse,poly_3_reverse,add_result);Displaypolynomial(add_result);
}//功能3界面
void differentialandprint(){system("cls");//清屏printf("ENTER FUNCTION: Get differential of a polynomial and print result to screen------------3.\n");//初始化多项式Cprintf("Initialize polynomial.\n");polylist poly_5;printf("Please input highest exponential(integer) and a number series of coefficient to initialize the polynomial.\n");printf("highest exponential:\n");int Initsize;scanf("%d",&Initsize);Initsize=Initsize+1;//printf("The number series of coefficient:(input)\n");Creatpolyn(poly_5,Initsize);//展示多项式Cprintf("\nNow the polynomial is:\n");polylist poly_5_reverse;Copy_polylist(poly_5,poly_5_reverse);//复制一个原链表到别的内存空间poly_5_reverse = revers_Llist(poly_5_reverse);//逆置Displaypolynomial(poly_5_reverse);printf("\nInput the  differential order:\n");int N;scanf("%d",&N);//一阶微分阶数printf("\n %d order differential of polynomial is:\n",N);polylist differential_result_1st;differentialpoly(poly_5_reverse,N,differential_result_1st);Displaypolynomial(differential_result_1st);
}//功能4界面
void integralandprint(){system("cls");//清屏//初始化多项式Dprintf("Initialize polynomial.\n");polylist poly_6;printf("Please input highest exponential(integer) and a number series of coefficient to initialize the polynomial.\n");printf("highest exponential:\n");int Initsize;scanf("%d",&Initsize);Initsize=Initsize+1;//printf("The number series of coefficient:(input)\n");Creatpolyn(poly_6,Initsize);//展示多项式Dprintf("\nNow the polynomial is:\n");polylist poly_6_reverse;Copy_polylist(poly_6,poly_6_reverse);//复制一个原链表到别的内存空间poly_6_reverse = revers_Llist(poly_6_reverse);//逆置Displaypolynomial(poly_6_reverse);//不定积分printf("\n Indefinite integral of polynomial is:\n");polylist integeral_result;indefiniteintegralpoly(poly_6_reverse,integeral_result);Displaypolynomial(integeral_result);
}

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

  1. 数据结构-线性表之用队列实现栈用栈实现队列

    文章目录 **********用队列实现栈 一:思路 二:实现 (1)结构体定义 (2)初始化和销毁 (3)进"栈" (4)出"栈" 三:代码 ******** ...

  2. 数据结构-线性表之带头结点的双向循环链表

    文章目录 前言 实现 (1)结构定义 (2)基本函数 (3)操作实现 测试 代码 前言 链表的类型有很多种(根据带头或不带头,循环或非循环等等),但是我们重点研究的只有两种,一种结构非常简单是无头单向 ...

  3. 数据结构摧毁线性表用c语言,[简述]数据结构-线性表(c语言实现)

    [简述]数据结构-线性表(c语言实现)second60 20180422 1. 线性表的定义 线性表是具有相同特性的数据元素的一个有限序列. 2. 线性表抽象数据类型描述 ADT  List { 数据 ...

  4. 王道数据结构线性表:有读者认为直接去掉p结点会造成断链?

    王道数据结构线性表:有读者认为直接去掉p结点会造成断链? 我用图解的方式来说明一下,文字有点多,看起来比较眼疼,但是内容不多,希望能对你有帮助. 书上的代码 解释 (ps:对上面解释的一点补充↓)

  5. 数据结构——线性表(三)

    数据结构--线性表(三) 作者:黑衣侠客 一.线性表的定义 线性表,从名字来看,可以发现,是具有像线一样性质的表 线性表:零个或多个数据元素的有限序列. 首先,它是一个序列,也就是说,元素之间是有顺序 ...

  6. 数据结构-线性表(严书代码实现)

    数据结构-线性表的顺序表示代码 //头文件内容实现 #ifndef SEQLIST_H_INCLUDED #define SEQLIST_H_INCLUDED #include<string.h ...

  7. 数据结构-线性表-思维导图+小结

    数据结构-线性表思维导图+小结 1 数据结构-第二章-线性表-思维导图 2 数据结构-第二章-线性表-习题小结 2.1 概念性习题小结 2.2 操作性习题小结 1 数据结构-第二章-线性表-思维导图 ...

  8. 数据结构线性表基本操作

    数据结构线性表基本操作 基本内容 线性表的顺序表示和实现 线性表的顺序存储表示 顺序表中基本操作的实现 1.顺序表的初始化 2.取值 3.查找 4.插入 5.删除 线性表的链式表示和实现 单链表的定义 ...

  9. c语言构造一个空线性表l,数据结构线性表顺序结构的定义与实现C语言-Go语言中文社区...

    大家好,今天给大家总结了一下数据结构里面的线性表的顺序结构,顺序表表示的是用一组地址连续的存储单元依次存储线性表的数据元素,所以顺序结构的实现一般采用数组的方式来实现,存储空间也采用动态分配的方式.在 ...

  10. 数据结构——线性表(2)

    上接 数据结构--线性表(1) 上文中介绍了线性表的顺序存储结构和单链表的介绍与代码实现,接下来,继续介绍线性表的链式存储 循环链表   在座的各位都很年轻,不会觉得日月如梭.可上了点年纪的人,比如我 ...

最新文章

  1. 51CTO现已开通二级域名~~~~~
  2. TCP/IP协议基础
  3. [Python]小甲鱼Python视频第002课(第一个游戏)课后题及参考解答
  4. 《剑指offer》扑克牌顺序
  5. fiddler设置https抓包
  6. 2个网卡配置相同ip 华为交换机_【跟着做】华为网络设备配置
  7. pb 导出文件 日期格式_「案例分享」ERP系统导出数据注意事项
  8. c语言数组和字符串编程题,C语言中的字符数组和字符串详解
  9. 【雷达通信】《现代雷达系统分析与设计》大作业【含Matlab源码 285期】
  10. 树莓派4B之雨滴雨水传感器模块(python3)
  11. STC单片机实现printf
  12. 快速模版的本地化改进
  13. 数据分析 线性回归分析 方差分析表
  14. js去掉字符串第一位和最后一位
  15. cute-cnblogs 自定义博客园样式美化二期来啦~
  16. ESP32-WROOM-32 ESP32 wifi模块基本参数与引脚定义
  17. 华为eNSP模拟器软件介绍和基础命令详解
  18. MATLAB读取网页内链接,Matlab使用urlread()读取网页乱码问题
  19. 20岁后长高增高秘诀
  20. 如何在PPT中插入校徽等Logo并修改颜色(无需下载任何软件)

热门文章

  1. 如何优雅的在 Word 中插入代码,PlanetB 的完美替代方案
  2. postgreSql数据库笔记
  3. C++11 ThreadPool总结
  4. mongo写入mysql_从mysql读取数据写入mongo
  5. 通信原理 | 波段的划分
  6. [蓝屏]driver_unloaded_without_cancelling_pending_operations
  7. vue动态生成二维码,扫码登录
  8. 使用JDK的 keytool 生成JKS,修改查看JKS信息
  9. 使用jmeter进行api接口压力测试
  10. TCP与UDP 的区别