没有合适的资源?快使用搜索试试~ 我知道了~
17061833 _於文卓_一元稀疏多项式加减法1
需积分: 0 3 下载量 116 浏览量
2022-08-08
22:40:51
上传
评论
收藏 330KB DOCX 举报
温馨提示
试读
15页
2.输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列
资源推荐
资源详情
资源评论
数据结构实践课报告
题目:一元稀疏多项式计算器
班级:17052317 姓名:於文卓 学号 17061833 完成日期:2018 年 11 月 5 日
一、需求分析
1.输入并建立多项式;
2.输出多项式,输出形式为整数序列:
n
,
c
1
,
e
1
,
c
2
,
e
2
,……,
c
n
,
e
n
,其中 n 是多
项式的项数,
c
i
和
e
i
分别是第
i
项的系数和指数,序列按指数降序排列;
3.多项式 a 和 b 相加,建立多项式 a+b;
4.多项式 a 和 b 相减,建立多项式 a - b;
5. 测试数据:
(1) (2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7)
(2) (6x^-3-x+4.4x^2-1.2x^9+1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15 )
=(-7.8x^15-1.2x^9+12x^-3-x);
(3)(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5);
(4)(x+x^3)+(-x-x^3)=0
(5)(x+x^100)+(x^100+x^200)=(x+2x^100+x^200)
(6)(x+x^2+x^3)+0=x+x^2+x^3
(7)互换上述测试数据中的前后两个多项式
二、概要设计
1. 链表的抽象数据类型定义为:
ADT Node{
数据对象:D={ ai | ai∈ElemSet, i=1,2,...,n, n≥0 }
数据关系:R1={ <ai-1, ai>|ai-1, ai∈D, i=2,...,n }
基本操作:
InitList(&L)
操作结果:构造一个空的线性表 L。
DestroyList(&L)
初始条件:线性表 L 已存在。
操作结果:销毁线性表 L。
ClearList(*L)
初始条件:线性表 L 已存在。
操作结果:将线性表 L 重置为空表。
LocateElem(L, e, cmp())
初始条件:线性表 L 已存在,compare()是元素判定函数。
操作结果:返回 L 中第 1 个与 e 满足关系 cmp()的元素的位序。 若这样的元素不存
在,则返回值为 0。
SetCurElem(&p, e)
初始条件:线性表 L 已存在,且非空。
操作结果:用元数 e 更新 p 所指结点中元数的值。
GetCurElem(p)
初始条件:线性表 L 已存在,且非空。
操作结果:返回 p 所指结点中数据元数的值。
InsFirst (&L, h, s)
初始条件:线性表 L 已存在,h 结点在 L 中。
操作结果:在 L 的 s 所指结点插入在 h 结点之后,L 的长度加 1。
DelFirst (&L, h, q)
初始条件:线性表 L 已存在且非空,q 结点在 L 中且不是尾结点
操作结果:删除链表 L 中的 h 结点之后的结点 q,L 的长度减 1。
MakeNode(&p, e)
操作结果:创建了一个结点 p,其 data 部分为 e。
FreeNode(&p)
初始条件:结点 p 存在且非空。
操作结果:释放结点 p 空间。
Append(LinkList &L,Link s)
初始条件:线性表 L 已存在。
操作结果:s 及 s 以后的结点链接到了原 L 之后,L 的长度增加链上的结点数。
ListEmpty(L)
初始条件:线性表 L 已存在。
操作结果:若线性链表 L 为空表,则返回 TRUE,否则返回 FALSE。
GetHead(L)
初始条件:线性表 L 已存在。
操作结果:返回线性链表 L 中头结点的位置。
NextPos(L, p)
初始条件:线性表 L 已存在。
操作结果:返回 p 所指结点的直接后继的位置,若没后继,则返回 NULL。
int cmp(a, b)
初始条件:存在两个元数。
操作结果:比较 a,b 的数值,分别返回-1,0,1。
} ADT LinkList
2.一元多项式的抽象数据类型定义为:
ADT Polynomial{
数据对象:D={ ai | ai∈TermSet, i=1,2,...,m, m≥0 }
数 据 关 系 : R1 = { <ai-1, ai>|ai-1, ai ∈ D, 且 ai-1 中 的 指 数 值 <ai 中 的 指 数 值 ,
i=2,……,n}
基本操作:
Creat(&P,m)
操作结果:输入 m 项的系数和指数,建立一元多项式 P。
Add(&Pa,&Pb)
初始条件:一元多项式 Pa 和 Pb 已存在。
操作结果:完成多项式相加运算,即:Pa=Pa+Pb,并销毁一元多项式 Pb。
Sub (&Pa,&Pb)
初始条件:一元多项式 Pa 和 Pb 已存在。
操作结果:完成多项式相减运算,即:Pa=Pa-Pb,并销毁一元多项式 Pb。
Value_x(Pa , x)
初始条件:一元多项式 Pa 已存在。
操作结果:求多项式在 x 处的值。
Print (Node*p)
初始条件:一元多项式 p 已存在,且已知多项式项数。
操作结果:打印输出一元多项式 p 的项数、系数和指数。
Advance_print(p, m)
初始条件:一元多项式 p 已存在,且已知多项式项数。
操作结果:打印输出一元多项式的类数学表达式。
Sort (&p)
初始条件:一元多项式 p 已存在。
操作结果:对多项式 p 进行排序
Repeat(&p)
操作结果:对多项式 p 自身进行化简
}ADT Polynomial
三、本程序包含 4 个模块:
(1)主程序模块:
int main(){
初始化;
接受命令;
while(命令!=退出){
处理命令;
接受命令;
}
return 0;
}
(2)一元多项式单元模块——实现一元多项式的抽象数据类型;
(3)链表单元模块——实现链表的抽象数据类型;
(4)结点结构单元模块——定义链表的节点结构。
各模块之间的调用关系如下:
主程序模块 一元多项式单元模块 链表单元模块
结点结构单元模块
四、实验程序
/*
* @Author: 於文卓
* @Date: 2018-11-02 09:54:26
* @Last Modified by: 於文卓
* @Last Modified time: 2018-11-05 23:14:52
*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct Node
{
double xishu;
int zhishu;
struct Node *next;
} Node;
剩余14页未读,继续阅读
资源评论
申增浩
- 粉丝: 18
- 资源: 297
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功