一元稀疏多项式简单计数器Word文件下载.docx

上传人:b****1 文档编号:12992567 上传时间:2022-10-01 格式:DOCX 页数:17 大小:44.69KB
下载 相关 举报
一元稀疏多项式简单计数器Word文件下载.docx_第1页
第1页 / 共17页
一元稀疏多项式简单计数器Word文件下载.docx_第2页
第2页 / 共17页
一元稀疏多项式简单计数器Word文件下载.docx_第3页
第3页 / 共17页
一元稀疏多项式简单计数器Word文件下载.docx_第4页
第4页 / 共17页
一元稀疏多项式简单计数器Word文件下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

一元稀疏多项式简单计数器Word文件下载.docx

《一元稀疏多项式简单计数器Word文件下载.docx》由会员分享,可在线阅读,更多相关《一元稀疏多项式简单计数器Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。

一元稀疏多项式简单计数器Word文件下载.docx

(7)互换上述测试数据中的前后两个多项式

、概要设计

为实现上述程序的功能,应以带头结点的单链表表示多项式。

为此,需要一个抽象数据类型:

单链表。

2.1单链表的抽象数据类型定义

ADTLinkList{

数据对象:

D={ai|ai∈TermSet,i=1,2,…,m,m≥0

TermSet中的每个元素包含一个表示系数的实数和表示指数的整数}

数据关系:

R1={<

ai-1,ai>

ai-1,ai∈D且ai-1中的指数值<

ai中的指数值,i=2,…,n}

基本操作:

CreatLinkList(&

p,m)

操作结果:

输入m项的系数和指数,建立一元多项式p。

DestoryLinkList(&

p)

初始条件:

一元多项式p已存在。

销毁一元多项式p.

PrintLinkList(p)

打印输出一元多项式p.

AddLinkList(&

pa,&

pb)

一元多项式pa和pb已存在。

完成多项式的相加运算,即:

pa=pa+pb,并销毁一元多项式pb.

SubtractLinkList(&

完成多项式的想减运算,即:

pa=pa-pb,并销毁一元多项式pb.

MultiLinkList(&

完成多项式相乘运算,即:

pa=pa*pb,并销毁一元多项式pb.

}ADTLinkList

2.2本程序包括个模块:

1)主程序模块:

Voidmain(){

初始化;

输出菜单;

While

(1){

接受命令;

处理命令;

}(循环一直为真直至接受退出命令);

2)单链表单元模块——实现单链表的抽象数据类型;

3)结点结构单元模块——定义单链表的结点结构。

各模块之间的调用关系如下:

主程序模块

‌‌

单链表单元模块

结点结构单元模块

三、详细设计

3.1元素类型、结点类型和指针类型

typedefintStatus;

typedefintElemType;

typedefstructLNode{

 

float 

coef;

//定义项的系数

ElemType 

expn;

//定义项的指数

struct 

LNode*next;

//指向下一个节点

}LNode,*LinkList;

StatusMakeNode(LinkList&

p,LinkListhead)

{//分配由p指向下一个多项式的头结点head、后继为空的结点,并返回TRUE,

//若分配失败,则返回FALSE

p=(LinkList)malloc(sizeof(structLNode));

if(!

p)returnfalse;

p=head;

p->

next=null;

returnture;

voidFreeNode(LinkList&

{//释放p所指结点

free(q1);

q1=q2;

q2=q2->

next;

}

3.2单链表的基本操作设置如下:

voidInsert(LinkListp,LinkListh);

//将节点p插入到多项式链表h

LinkListCreateLinkList(LinkListhead,intm);

//建立一个头指针为head、项数为m的一元多项式,并返回该多项式的头结点;

//若分配空间失败,则返回FALSE

voidDestroyLinkList(LinkListp);

//销毁多项式p

voidPrintLinkList(LinkListP);

//输出构造的一元多项式P

Statuscompare(LinkLista,LinkListb)

//节点进行比较:

a的指数>

b的指数 

return1;

a的指数==b的指数 

return0;

a的指数<

b的指数 

return-1.

LinkListAddLinkList(LinkListpa,LinkListpb)

//求解并建立多项式a+b,返回其头指针

LinkListSubtractLinkList(LinkListpa,LinkListpb)

//求解并建立多项式a-b,返回其头指针

floatValueLinkList(LinkListhead,intx)

//输入x值,计算并返回多项式的值

LinkListDerivative(LinkListhead)

//求解并建立导函数多项式,并返回其头指针

LinkListMultiplyLinkList(LinkListpa,LinkListpb)

//求解并建立多项式a*b,返回其头指针

其中部分操作的伪码如下:

LinkListCreateLinkList(LinkListhead,intm)

{

p=head=(LinkList)malloc(sizeof(structLNode));

head->

next=NULL;

for(i=0;

i<

m;

i++)

p=(LinkList)malloc(sizeof(structLNode));

//建立新结点以接收数据

printf("

请输入第%d项的系数与指数:

"

i+1);

scanf("

%f%d"

&

coef,&

expn);

Insert(p,head);

//调用Insert函数插入结点

returnhead;

}//CreateLinkList

Statuscompare(LinkLista,LinkListb){

if(a&

&

b){

if(!

b||a->

expn>

b->

expn)return1;

elseif(!

a||a->

expn<

expn)return-1;

elsereturn0;

a&

b)return-1;

//a多项式已空,但b多项式非空

elsereturn1;

//b多项式已空,但a多项式非空

}//compare

floatValueLinkList(LinkListhead,intx){ 

for(p=head->

p;

p=p->

next){

t=1;

for(i=p->

expn;

i!

=0;

) 

//i为指数的系数pow(x,i)

{if(i<

0){t/=x;

i++;

//指数小于0,进行除法

else{t*=x;

i--;

}//指数大于0,进行乘法 

sum+=p->

coef*t;

}returnsum;

}//ValueLinkList

LinkListMultiplyLinkList(LinkListpa,LinkListpb){//求解并建立多项式a*b,返回其头指针

LinkListqa=pa->

LinkListqb=pb->

hf=(LinkList)malloc(sizeof(structLNode));

//建立头结点

hf->

for(;

qa;

qa=qa->

next) 

{for(qb=pb->

qb;

qb=qb->

next)

{pf=(LinkList)malloc(sizeof(structLNode));

pf->

coef=qa->

coef*qb->

coef;

expn=qa->

expn+qb->

Insert(pf,hf);

}//调用Insert函数以合并指数相同的项

}returnhf;

}//MultiplyLinkList

3.3主函数和其他函数的伪码算法

voidmain(){//主函数

Initiation();

//多项式初始化

PrintCommand();

//输出菜单

while

(1){ 

//循环一直为真知道选择j||J即退出命令时,程序退出

\n请选择操作:

);

%c"

flag);

Interpter(flag);

//具体的操作命令

}} 

//main

voidInitiation()

请输入a的项数:

%d"

m);

pa=CreateLinkList(pa,m);

//建立多项式a

请输入b的项数:

n);

pb=CreateLinkList(pb,n);

//建立多项式b

printf("

-------------------多项式已创建-----------------------\n"

}//Initiation

voidPrintCommand(){ 

//输出菜单

显示键入命令的提示信息;

Printf(’A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J’);

}//PrintCommand

voidInterpter(charflag){ 

switch(flag

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1