数据结构C语言一元稀疏多项式计算器Word文档下载推荐.docx

上传人:b****5 文档编号:15810012 上传时间:2022-11-16 格式:DOCX 页数:15 大小:20.12KB
下载 相关 举报
数据结构C语言一元稀疏多项式计算器Word文档下载推荐.docx_第1页
第1页 / 共15页
数据结构C语言一元稀疏多项式计算器Word文档下载推荐.docx_第2页
第2页 / 共15页
数据结构C语言一元稀疏多项式计算器Word文档下载推荐.docx_第3页
第3页 / 共15页
数据结构C语言一元稀疏多项式计算器Word文档下载推荐.docx_第4页
第4页 / 共15页
数据结构C语言一元稀疏多项式计算器Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构C语言一元稀疏多项式计算器Word文档下载推荐.docx

《数据结构C语言一元稀疏多项式计算器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构C语言一元稀疏多项式计算器Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构C语言一元稀疏多项式计算器Word文档下载推荐.docx

指数expn

指针域next

运用尾插法建立两条单链表,以单链表polynp和polynh分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polynp中的结点插入到单链表polynh中),因此“和多项式”中的结点无须另生成。

为了实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项,由此得到下列运算规则:

①若p->

expn<

q->

expn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。

②若p->

expn=q->

expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。

③若p->

expn>

expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。

二、概要设计

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

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

单链表。

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.

}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,返回其头指针

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

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->

b->

expn)return1;

elseif(!

a||a->

expn)return-1;

elsereturn0;

a&

b)return-1;

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

elsereturn1;

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

}//compare

floatValueLinkList(LinkListhead,intx){ 

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

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’);

}//PrintCommand

voidInterpter(charflag){ 

switch(flag)

{case'

A'

:

case'

a'

{PrintLinkList(pa);

break;

case'

B'

b'

{PrintLinkList(pb);

case'

C'

case'

c'

{AddLinkList(pa,pb)

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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