多项式的简单运算数据结构课程设计Word文档下载推荐.docx

上传人:b****5 文档编号:19512019 上传时间:2023-01-07 格式:DOCX 页数:13 大小:95.76KB
下载 相关 举报
多项式的简单运算数据结构课程设计Word文档下载推荐.docx_第1页
第1页 / 共13页
多项式的简单运算数据结构课程设计Word文档下载推荐.docx_第2页
第2页 / 共13页
多项式的简单运算数据结构课程设计Word文档下载推荐.docx_第3页
第3页 / 共13页
多项式的简单运算数据结构课程设计Word文档下载推荐.docx_第4页
第4页 / 共13页
多项式的简单运算数据结构课程设计Word文档下载推荐.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

多项式的简单运算数据结构课程设计Word文档下载推荐.docx

《多项式的简单运算数据结构课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《多项式的简单运算数据结构课程设计Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。

多项式的简单运算数据结构课程设计Word文档下载推荐.docx

这很重要,考虑到系数为0,该节点

就没有意义,故而链表结束创建的标志是00,这样的节点会在插入的过程中自动删除。

定义节点

typedefstructnode//定义节点类型

{

floatcoef;

intexpn;

structnode*next;

}PLOY;

创建链表

voidinsert(PLOY*head,PLOY*inpt);

PLOY*creat(charch);

//charch中的ch则是多项式的字符标志,如f,g等,传入字符后,接下来就为其函数内的暂存单元赋数值,接着将创建的节点,调用insert函数,将节点插入链

表,继而返回链表的头指针

输出链表

voidprint(PLOY*fun)//此函数是根据实际的输出格式,对链表的信息进行加工后输出,由于考虑到如果系数为正,直接输出就会缺少‘+'

号,而如果该系数为正且系链表的第一项就省

略,另外就是,如果系数的绝对值为1,就可以省略系数1,直接输出符号链表的加操作

PLOY*addPLOY(PLOY*head,PLOY*pre)//多项式相加,此原理就是将其中的一条链表的各个项,都用一个结构体单元拷贝后,调用insert函数直接插入另外一条链表,从而返回该链表

链表的减操作

PLOY*minusPLOY(PLOY*head,PLOY*pre)//多项式相减,原理与加法相似,但是由于设计到‘—'

号,在拷贝每个结构体单元后必须,在系数上加‘—'

链表的乘操作

PLOY*byPLOY(PLOY*head1,PLOY*head2)//多项式相乘,先从其中一个链表的第一项开始,依次去乘以另一个链表的每一项,并开辟新链表,插入每一项,直到全部乘完

#include<

iostream>

usingnamespacestd;

typedefstructnode//定义节点类型{

voidstart()//用户选择界面

{cout<

<

"

\t\t====================================="

endl;

cout<

\t\t两个一元多项式的相加/相减,相乘:

cout<

\t\t请选择操作:

\t\t0.退出"

\t\t1.两个一元多项式相加"

\t\t2.两个一元多项式相乘"

\t\t3.两个一元多项式相减"

}

voidinsert(PLOY*head,PLOY*inpt)//参数1:

链表的头节点,参数2:

待插入的节点

PLOY*pre,*now;

intsignal=0;

pre=head;

//pre指向头节点

if(pre->

next==NULL){pre->

next=inpt;

}//如果只有头结点,就将待插入的节点,接上

else{

now=pre->

next;

//否则将now指针指向第一个节点

while(signal==0)

指数小,往后插

下一个节点没有

if(inpt->

expn<

now->

expn)//

if(now->

next==NULL)//

signal=1;

else

{pre=now;

 

如果发现比现在的链节大了就插入到这个连接的前

elseif(inpt->

expn>

expn)//面

inpt->

next=now;

pre->

signal=1;

coef=now->

coef+inpt->

coef;

//系数相加signal=1;

deleteinpt;

//释放插入节点if(now->

coef==0)//系数等于0{

pre->

next=now->

//删除该节点

deletenow;

PLOY*creat(charch)//创建链表

PLOY*head,*inpt;

floatx;

inty;

//系数及指数的暂存单元

head=newPLOY;

//创建链表头head->

next=NULL;

//初始化链表

)"

请输入一元多项式"

ch<

:

(格式是:

系数指数;

以00结束!

cin>

>

x>

y;

//给暂存单元赋值

while(x!

=0)

inpt=newPLOY;

inpt->

coef=x;

expn=y;

//以暂存单元的数值来创建一个节点

insert(head,inpt);

//将该节点插入链表中

的下一项:

(以00结束!

)"

//给下一个节点的暂存单元赋值

returnhead;

PLOY*addPLOY(PLOY*head,PLOY*pre)//{

PLOY*inpt;

intflag=0;

while(flag==0)

next==NULL)

flag=1;

//当指向空时跳出循环else

pre=pre->

//创建新链节inpt->

coef=pre->

expn=pre->

expn;

insert(head,inpt);

}//把当前"

g(x)"

的节点插入到"

y(x)"

中}

PLOY*minusPLOY(PLOY*head,PLOY*pre)//{

//当指向空时跳出循环

多项式相加

多项式相减

coef=-pre->

}//否则把当前"

//多项式相乘

PLOY*byPLOY(PLOY*head1,PLOY*head2){

PLOY*inpt,*res,*pre;

res=newPLOY;

res->

//初始化存放结果的链表

head1=head1->

pre=head2;

//当现在指向空时跳出循环head1=head1->

continue;

if(head1==NULL)

//当现在指向空时跳出循环continue;

coef*head1->

expn+head1->

insert(res,inpt);

//把当前"

的链节插入到"

中}returnres;

}voidprint(PLOY*fun)//输出多项式

PLOY*printing;

//打印指针

//打印完成的标志

printing=fun->

//给打印指针初始化,从第1个节点开始

if(fun->

0"

return;

//如果该链表为空,则输出0while(flag==0)

if(printing->

coef>

0&

&

fun->

next!

=printing)//如果打印项不是第1项,且系数大于0

printf("

+"

);

//先打印"

号,因为正数不带"

coef!

=1&

printing->

=-1)//系数非1或-1的普通情况

%f"

printing->

coef);

expn==1)

X"

expn!

printf("

XA%d"

printing->

expn);

else//系数为1或者-1的情况

coef==1)

if(!

expn)printf("

1"

elseif(printing->

expn==1)printf("

printing->

coef==-1)

-1"

elseif(printing->

-X"

elseprintf("

-XA%d"

expn);

next==NULL)flag=1;

printing=printing->

}voidmain()

PLOY*f,*g;

intsign=-1;

//设置标志

start();

\n输入你想要的操作代码:

while(sign!

cin>

sign;

switch(sign)

case0:

break;

//退出

case1:

\n你选择的操作是多项式相加f=creat('

f'

//输入多项式f(x)cout<

f(x)="

;

print(f);

g=creat('

g'

//输入多项式g(x)

g(x)="

print(g);

F(x)=f(x)+g(x)="

f=addPLOY(f,g);

//两个多项式相加print(f);

sign=-1;

//复位标志

//回复用户选择界面break;

case2:

你选择的操作是多项式相乘f=creat('

//输入多项式g(x)cout<

F(x)=f(x)*g(x)="

f=byPLOY(f,g);

//两个多项式相乘print(f);

case3:

你选择的操作是多项式相减f=creat('

cout«

F(x)=f(x)-g(x)二"

f=minusPLOY(f,g);

〃两个多项式相减

print(f);

sign=-1;

〃复位标志

〃回复用户选择界面

default:

输入有误!

请重新选择操作!

〃选择错误,返回选择界面

拠-1-——兀京卫肉式的相力14K柏谟.柏乘土

~H:

\Liehuq空宫林羊bh:

—亓*EhJexe"

扌年探■!

*=K_退出■*-i-w-r—.h-TO-T9-WT-.

P俞入唯尔扭.歪白勺择作-代弔马=N

#夢煲岂鬆蠡錚瑁翌蹩.孰数寸旨冰=1^,»

«

结束!

仙镣入一兀秦顶心的T—项乂以“«

结馬!

>

忌矗入一亍亡割顼心白勺下一顼=2-U«

结康!

P

|T<

-c>

—1-ldtJie,tit,0Hr-总.tJtJidiJtitjK亠-1

萨镜入一尢自工页:

^乂榕式畀・疾吉攵扌以❷a结耒!

a皆缶入一尹;

宰珈竝的卜一换=€咲8a结車!

kf*T4fi?

..A_—“”,宰丄页:

代口的卜一一两="

乂片0紿审!

na

Lcm^—4_<

-5t_ciRPinnfixA4

fee»

二:

f<

*H<

^c>

—k_nnnem^KA4

两亍开哥工页#的相如”相嫌才口年

瞿婀髀眇

吉籀人一兀毎项式£

a35,

呼输入一元參顼戎£

的下一项乂叹00纪東!

请辐入一元參工页式£

的下一顼y以0结束!

M0

tcse^^Gifi-RRfl»

HRXAA*23-ARRF)RR>

E^"

5

诒输入一k多项式rr=u檢式足.毎数扌抒敕;

1?

Ab0结束!

bbh

晴输人一元辜H页尹暫旳下一丄页Y以厲«

負^束!

揺诲入一元务项式n的下一顶江以90结束!

A

冃0

fr<

sc>

-5.n»

dnf}dM^&

E.HRR»

RnX-6

lr<

M>

-f-2B(9.0«

UtdHUK-^71*115.UU«

U00KVC3n^A36.B00UU0K^12112BU-

一两不二完芸議菽鬲祐乔;

藕蠢厂需55厂

请选擇探■(仁❺唾萸__■、:

L_两丁一匹垒;

一—..—审个一匹秦藝总:

芫垂豔癮

3”两个一兀峯顼式

两彳-一亓狷」页式的相力U”相减,相汞=

一一目目

J-1-1_连以„HHH_-"

一吩凳壬操一军更人—“i-J-LJ-H磴曲两两一^0iW3_

四、总结

程序=算法+数据结构;

通过本次的C++数据结构的实习,使我对于这句话的理解更加深刻,

数据结构就像是建立一个数学模型,将现实世界的各种事物及现实问题抽象出来,并加以表示,使计算机能够按照人类的意愿,进行运算。

而只有模型建立得合适,才能够简化计算。

从而设计出高效,稳定的好程序。

以上便是我对此次实习的最大理解。

五、参考文献:

[1]王红梅,胡明,王涛编著.数据结构(C++版).北京.清华大学出版社,2007

[2]王晓东编著.数据结构.北京.科学出版社,2002

[3]郑莉等编著.C++程序设计教程.北京机械工业出版社,2001

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

当前位置:首页 > 医药卫生

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

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