实验03堆栈应用括号匹配实验报告Word下载.docx

上传人:b****5 文档编号:20839659 上传时间:2023-01-25 格式:DOCX 页数:14 大小:37.35KB
下载 相关 举报
实验03堆栈应用括号匹配实验报告Word下载.docx_第1页
第1页 / 共14页
实验03堆栈应用括号匹配实验报告Word下载.docx_第2页
第2页 / 共14页
实验03堆栈应用括号匹配实验报告Word下载.docx_第3页
第3页 / 共14页
实验03堆栈应用括号匹配实验报告Word下载.docx_第4页
第4页 / 共14页
实验03堆栈应用括号匹配实验报告Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实验03堆栈应用括号匹配实验报告Word下载.docx

《实验03堆栈应用括号匹配实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《实验03堆栈应用括号匹配实验报告Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

实验03堆栈应用括号匹配实验报告Word下载.docx

熟练使用堆栈实现括号匹配算法

三、实验内容

本次实验有两项内容:

(一)堆栈应用括号匹配

1、问题描述

一个算术表达式中包括圆括号、方括号和花括号三种形式的括号

编程实现判别表达式中括号是否正确匹配的算法

2、算法

顺序扫描算术表达式

若算术表达式扫描完成,此时如果栈空,则正确返回(0);

如果栈未空,说明左括号多于右括号,返回(-3)

从算术表达式中取出一个字符,如果是左括号(‘(‘或‘[‘或‘{‘),则让该括号进栈(PUSH)

如果是右括号(‘)‘或‘]‘或‘}‘):

2、如果栈为空,则说明右括号多于左括号,返回(-2)

⑵、如果栈不为空,则从栈顶弹出(POP)一个括号:

若括号匹配,则转1继续进行判断;

否则,说明左右括号配对次序不正确,返回(-1)

3、输入

第一行:

样本个数,假设为n。

第二到n+1行,每一行是一个样本(算术表达式串),共n个测试样本。

4、输入样本

4

{[(1+2)*3]-1}

{[(1+2]*3)-1}

(1+2)*3)-1}

{[(1+2)*3-1]

5、输出

共有n行,每一行是一个测试结果,有四种结果:

0:

左右括号匹配正确{[(1+2)*3]-1}

-1:

左右括号配对次序不正确{[(1+2]*3)-1}

-2:

右括号多于左括号(1+2)*3)-1}

-3:

左括号多于右括号{[(1+2)*3-1]

6、输出样本

-1

-2

-3

(二)数制转换

对于任意十进制数转换为k进制,包括整数部分和小数部分转换。

整数部分采用除k求余法,小数部分采用乘k取整法例如x=19.125,求2进制转换

整数部分19,小数部分0.125

19/2=9…10.125*2=0.25…0

9/2=4…10.25*2=0.5…0

4/2=2…00.5*2=1…1

2/2=1…0

1/2=0…1

所以整数部分转为10011,小数部分转为0.001,合起来为10011.001

提示整数部分可用堆栈,小数部分可用队列实现

注意:

必须按照上述方法来实现数制转换,其他方法0分

2、输入

第一行输入一个t,表示下面将有t组测试数据。

接下来每行包含两个参数n和k,n表示要转换的数值,可能是非整数;

k表示要转换的数制,1<

k<

=16

3、输出

对于每一组测试数据,每行输出转换后的结果,结果精度到小数点后3位

2

19.1252

15.12516

5、输出样本

10011.001

F.200

四、程序清单

代码1:

#include<

iostream>

usingnamespacestd;

cstring>

#defineMaxsize100

ClassStack

{

public:

char*data;

inttop;

Stack()

{

top=0;

data=newchar[Maxsize];

}

intpush(chara)

data[top++]=a;

return1;

charpop()

top--;

returndata[top];

~Stack()

delete[]data;

};

intmain()

charData[Maxsize];

inti,jun=2;

freopen("

cin.txt"

"

r"

stdin);

cin>

>

i;

while(i)

Stacks1;

Data;

for(intj=0;

j<

strlen(Data)&

&

jun!

=-1&

jun!

=0;

switch(Data[j])

case'

{'

:

['

('

s1.push(Data[j]);

j++;

break;

}'

if(s1.top!

=0)

if(s1.pop()=='

else

jun=-1;

cout<

<

jun<

endl;

jun=0;

]'

)'

default:

if(s1.top==0)

0<

elseif(jun!

=-1)

chara=s1.pop();

if(a=='

||a=='

-3<

-2<

jun=2;

i--;

return0;

}

2:

usingnamespacestd;

constintLength=20;

voidTran(inte)

switch(e)

case10:

cout<

'

A'

;

break;

case11:

B'

case12:

C'

case13:

D'

case14:

E'

case15:

F'

//栈

structSqStack

int*top;

int*base;

intstacksize;

boolInitStack(SqStack&

S)

S.base=(int*)newint[Length*sizeof(int)];

if(!

S.base)

returnfalse;

S.top=S.base;

S.stacksize=Length;

returntrue;

boolDestroyStack(SqStack&

deleteS.base;

boolPush(SqStack&

S,inte)

*S.top++=e;

boolPop(SqStack&

S,int&

e)

if(S.top==S.base)

e=*--S.top;

boolStackEmpty(SqStack&

if(S.base==S.top)

returntrue;

//队列

structSqQueue

intfront;

intrear;

boolInitQueue(SqQueue&

Q)

Q.base=(int*)newint[Length*sizeof(int)];

Q.base)

Q.front=Q.rear=0;

boolEnQueue(SqQueue&

Q,inte)

Q.base[Q.rear]=e;

Q.rear++;

boolDeQueue(SqQueue&

Q,int&

if(Q.front==Q.rear)

e=Q.base[Q.front];

Q.front++;

boolDestroyQueue(SqQueue&

deleteQ.base;

//转换数制

voidConversion(doubletest,intradix)

intInteger=test,e,i,d;

doubleDecimal=test-Integer;

SqStackIntegerStack;

SqQueueDecimalQueue;

InitStack(IntegerStack);

while(Integer)

Push(IntegerStack,Integer%radix);

Integer/=radix;

while(!

StackEmpty(IntegerStack))

Pop(IntegerStack,e);

if(radix<

=10)

cout<

e;

else

Tran(e);

"

."

InitQueue(DecimalQueue);

i=3;

EnQueue(DecimalQueue,int(Decimal*radix));

Decimal=(Decimal*radix-int(Decimal*radix));

i--;

DeQueue(DecimalQueue,d);

if(d<

d;

Tran(d);

DestroyStack(IntegerStack);

DestroyQueue(DecimalQueue);

intmain()

inti,t,radix;

doubletestData;

//freopen("

cin2.txt"

t;

for(i=0;

i<

t;

i++)

cin>

testData>

radix;

Conversion(testData,radix);

return0;

五、程序运行时截图

1:

六、实验心得与体会(实验中遇到的问题及解决方案,或写点感想)

多练习,多思考。

指导教师批阅意见:

成绩评定:

指导教师签字:

年月日

备注:

注:

1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

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

当前位置:首页 > 高等教育 > 研究生入学考试

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

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