四则运算c++实现Word文档下载推荐.docx

上传人:b****4 文档编号:13706198 上传时间:2022-10-13 格式:DOCX 页数:11 大小:36.42KB
下载 相关 举报
四则运算c++实现Word文档下载推荐.docx_第1页
第1页 / 共11页
四则运算c++实现Word文档下载推荐.docx_第2页
第2页 / 共11页
四则运算c++实现Word文档下载推荐.docx_第3页
第3页 / 共11页
四则运算c++实现Word文档下载推荐.docx_第4页
第4页 / 共11页
四则运算c++实现Word文档下载推荐.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

四则运算c++实现Word文档下载推荐.docx

《四则运算c++实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《四则运算c++实现Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。

四则运算c++实现Word文档下载推荐.docx

利用栈实现四则运算。

(3)输出模块:

屏幕上显示后序遍历的结果。

三、详细设计

物理数据类型

1、用数组存储输入的表达式和输出的表达式

2、用栈存储操作

算法的具体步骤

求逆序遍历的算法

算法的时空分析

后序遍历的时间代价为O(n)

空间代价为一个数组.

输入和输出的格式

请输入中序表达式:

xxx#(#结束符)

输出的后缀是:

五、测试结果

5*(3+2)!

5#3#2#+*

Theresultis:

25

六、用户使用说明(可选)

1、“!

”结束符

2、输入的包括符号请不要超过十位

七、实验心得(可选)

1:

这次试验的优点是在不断地调试和运行之后终于实现了这个代码,完成了C++创建栈

的全部过程,让我的这个小组对栈的了解有人更加深入的认识,完成了栈的所有的基本操作,但是缺点在于这次试验的代码并不是完全符合条件,没有用树的遍历实现。

二叉树实现参考附录二。

2:

此次实验要求我们用中序输入一个四则运算的表达式,计算出结果后,再通过后续遍历输出。

我们组采用的是栈的方式做出了结果

但是我跟别的组的夏晓玲讨论出了另一种想法时,先把四则运算表达式按照优先级加好括号,这样建树时一遇到括号就建这个子树,然后再返回到原来的根节点,继续往下建树。

夏晓玲同学加括号的代码写了100多行,我们还在考虑有没有更简洁的写法。

但是在建树的过程中出现了问题,一旦表达式过长,就会失败。

这也是我们未能解决的问题。

这次实验,真正是我收获最大的一次,但问题是懂得了算法,写不出代码。

嗯,所以,在接下来的学习中,还要加深对代码这一块的了解和掌握。

3:

每次的数据结构试验,我总是抱着笨鸟先飞的心态,提早写程序,就算写不出来,也能把思路整理的差不多,这样才不至于在实验室里“手足无措”

本次试验是用二叉树实现将中缀表达式转化成后缀表达式输出。

二叉树掌握情况不是很好的我,首先想到的还是用栈来实现。

即使用栈首先要思考的还是如何进行符号优先级的判断。

思路如下:

case'

*'

:

/'

while(op.top!

=-

1&

&

op.data[op.top]!

='

('

op.top!

)//遇到‘*'

或者

‘/'

如果这是栈中为空并且不为‘('

并且不是‘*'

、‘/'

,则将栈顶元素赋值给数组,

跳出循环,然后将给符号压入栈中。

+'

-'

while(op.top!

=-1&

遇到‘+'

、‘-'

则需要判断如果栈顶不是空且不是‘('

,则将栈定元素赋给数组,跳出循环,然后将符号压入栈中

遇到‘('

压入栈中,遇到数字写入数组,遇到符号比照以上操作,遇到‘)'

,将栈内符号依次输入数组,‘('

弹出。

——————————————以上是我们用栈的方案的主要思路

本次题目的要求是用二叉树来实现,我暂时没有自己实现成功,但是我借鉴了以为同学的。

建二叉树最首要的任务就是优先级的判断,其主要思想是,从中缀表达式的最末符号来检测其优先级。

假设遇到括号,则跳过括号,遇到‘*'

号记录其位置,若遇到‘+'

则替换掉‘*'

的位置。

最终i记录的位置即为优先级最低的运算符,

为二叉树的根节点,i左边的表达式调用运算符优先级判断的函数然后递归返回左子树,右侧同理。

——————————————————以上为二叉树方法的思想

无论是用哪种方式实现的,都是一次力度很强的知识点巩固。

锻炼我们分析问题的深度以及细致度,更是理论应用实践的方式,所以总是尽力先自己思考,是在解决不了,那就请教“大神们”了,从中可以学到自己不会的东西。

七、附录(可选)

附录一:

用栈实现

测试数据:

5#3#2#+

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

**/

#include

usingnamespacestd;

栈的抽象类的定义

//template

classstack{

public:

virtualboolisEmpty()=0;

virtualvoidpush(constint&

d)=0;

virtualintpop()=0;

virtualinttop()=0;

};

顺序栈类的定义

classseqStack:

publicstack{

10

seqStack(intinitSize=10);

//构造函数,默认栈的容量为

boolisEmpty();

//判断栈是否为空

voidpush(constint&

d);

//进栈函数

intpop();

//出栈函数

inttop();

//返回栈顶元素

~seqStack();

//析构函数

//private:

int*data;

//栈顶指针

intmaxSize;

//栈的容量

inttop_p;

顺序栈类的实现

seqStack:

seqStack(intinitSize){maxSize=initSize;

data=newint[maxSize];

top_p=-1;

cout

}

boolseqStack:

isEmpty(){

returntop_p==-1;

voidseqStack:

resize(){

maxSize*=2;

int*tmp=data;

data=newint[maxSize];

for(inti=0;

i

data[i]=tmp[i];

deletetmp;

push(constint&

d){if(top_p==maxSize-1)throw0;

data[++top_p]=d;

intseqStack:

pop(){

//如果栈为空,抛出异常值0if(top_p==-1){

throw0;

returndata[top_p--];

top(){

//如果栈为空,抛出异常值0

if(top_p==-1){

returndata[top_p];

~seqStack(){

delete[]data;

后缀表达式***********************/intseqStack:

trans(charexp[])

{

charpostexp[10];

//注意只有10位charch;

inti=0,j=0;

top_p=-1;

ch=exp[i];

i++;

for(;

ch!

!

'

;

)//输入叹号结束

switch(ch)

 

case'

//

”情况

top_p++;

data[top_p]=ch;

break;

)'

{//“)”情况

while(data[top_p]!

postexp[j]=data[top_p];

j++;

top_p--;

break;

//“+”情况

-'

//“-”情况

while((top_p!

=-1)&

(data[top_p]!

))//(top_p!

)时出栈

data[top_p]=ch;

//压入栈中

//“*”情况

//“/”情况

时出栈

1)&

)&

(data[top_p]=='

||data[top_p]=='

))

'

default:

while(ch>

0'

ch

postexp[j]=ch;

i--;

postexp[j]='

#'

//数字区分符

}ch=exp[i];

}//结束循环

while(top_p!

=-1)//将运算符全部出栈{

//‘0'

结束

*******************************value

函数的实现

**/floatd=0;

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

charsh;

intk=0;

sh=postexp[k];

k++;

while(sh!

\0'

switch(sh)

data[top_p-1]=data[top_p-1]+data[top_p];

top_p--;

data[top_p-1]=data[top_p-1]-data[top_p];

data[top_p-1]=data[top_p-1]*dat

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

当前位置:首页 > PPT模板 > 商务科技

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

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